Разработка языка, предназначенного для программирования потоковых вычислений, страница 6


Управляющая таблица нисходящего автомата с несколькими состояниями

Данная таблица относится к версии грамматики приведённой выше. Управляющая таблица окончательной версии грамматики слишком велика.

Грамматика принадлежит классу LL(1)

 N сост. 

 flag_A 

 flag_S 

 flag_R 

 flag_E 

 Переход 

 Множество выбора 

 Действие 

 1

34 

{

41 

EOF

 1

42 

vars

 1

46 

join

50 

do

 1

81 

let

88 

}

 1

70 

ident

80 

}

 1

89 

{

10 

92 

let if }

11 

 1

55 

let

12 

 1

62 

if

13 

69 

}

14 

 1

141 

ident const (

15 

142 

let

16 

111 

(

17 

 1

118 

{

18 

121 

let

19 

 1

93 

else

20 

97 

let if }

21 

 1

103 

,

22 

108 

;

23 

 1

147 

const

24 

149 

let

25 

 1

98 

op1

26 

102 

otn ; )

27 

134 

ident const (

28 

109 

ident const (

29 

 1

127 

(

30 

 1

130 

ident

31 

132 

const

32 

 1

136 

op2

33 

140 

op1 otn ; )

34 

1

35 

35 

36 

 NameBlock.add

(currentLexem.textOfWord);

36 

1

37 

37 

1

38 

38 

1

42 

39 

1

40 

40 

1

34 

41 

1

42 

42 

1

43 

43 

1

44 

44 

1

81 

45 

1

46 

 VectorPFR.add(StrPFR.clone());

StrPFR.removeAllElements();

46 

1

47 

47 

48 

 NameBlock.remove

(NameBlock.size()-1);

48 

1

49 

49 

1

70 

50 

1

51 

51 

1

52 

52 

1

89 

53 

1

55 

54 

1

55 

 VectorPFR.add(StrPFR.clone());

StrPFR.removeAllElements();

55 

1

56 

56 

57 

 StrPFR.add

(currentLexem.textOfWord);

57 

1

58 

58 

1

141 

59 

60 

 StrPFR.add("let");

60 

1

61 

61 

1

55 

62 

1

63 

63 

1

111 

64 

65 

 StackIf .push(new Integer(++ifCnt));

StrPFR.add

("Label0_"+StackIf.peek()+":");

StrPFR.add("GF");

65 

1

118 

66 

67 

 StrPFR.add

("Label1_"+StackIf.peek()+":");

StrPFR.add("GO");

67 

1

93 

68 

1

55 

69 

1

70 

70 

1

71 

71 

1

72 

72 

1

73 

73 

1

74 

74 

1

75 

75 

1

76 

76 

1

77 

77 

1

103 

78 

1

79 

79 

1

70 

80 

1

81 

81 

1

82 

82 

83 

 StrPFR.add

(currentLexem.textOfWord);

83 

1

84 

84 

1

147 

85 

86 

 StrPFR.add("let");

86 

1

87 

87 

1

81 

88 

1

89 

89 

1

90 

90 

1

70 

91 

1

1

92 

92 

1

93 

93 

1

94 

94 

95 

 StrPFR.add

("Label0_"+StackIf.peek()+":");

95 

1

118 

96 

1

97 

 StrPFR.add

("Label1_"+StackIf.pop()+":");

97 

1

98 

 StrPFR.remove(StrPFR.size()-1);

StrPFR.remove(StrPFR.size()-1);

StrPFR.add

("Label0_"+StackIf.pop()+":");

98 

99 

 StackOp.push (currentLexem.textOfWord);

99 

1

100 

100 

1

134 

101 

1

102 

 StrPFR.add(StackOp.pop ());

102 

1

103 

103 

1

104 

104 

1

105 

105 

1

106 

106 

1

107 

107 

1

103 

108 

1

109 

109 

1

127 

110 

1

136 

111 

1

112 

112 

1

134 

113 

114 

 StackOp.push (currentLexem.textOfWord);

114 

1

115 

115 

1

134 

116 

117 

 StrPFR.add(StackOp.pop ());

117 

1

1

118 

118 

1

119 

119 

1

55 

120 

1

1

121 

121 

1

122 

122 

123 

 StrPFR.add

(currentLexem.textOfWord);

123 

1

124 

124 

1

141 

125 

126 

 StrPFR.add("let");

126 

1

1

127 

127 

1

128 

128 

1

134 

129 

1

1

130 

130 

131 

 StrPFR.add

(currentLexem.textOfWord);

131 

1

1

132 

132 

133 

 StrPFR.add

(currentLexem.textOfWord);

133 

1

1

134 

134 

1

109 

135 

1

98 

136 

137 

 StackOp.push (currentLexem.textOfWord);

137 

1

138 

138 

1

109 

139 

1

140 

 StrPFR.add(StackOp.pop ());

140 

1

141 

141 

1

134 

142 

1

143 

143 

144 

 StrPFR.add

(currentLexem.textOfWord);

144 

1

145 

145 

1

141 

146 

1

147 

 StrPFR.add

("let");

147 

148 

 StrPFR.add

(currentLexem.textOfWord);

148 

1

1

149 

149 

1

150 

150 

151 

 StrPFR.add

(currentLexem.textOfWord);

151 

1

152 

152 

1

147 

153 

1

154 

 StrPFR.add("let");