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


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

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

 N сост. 

 flag_A 

 flag_S 

 flag_R 

 flag_E 

 Переход 

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

 Действие 

 1

32 

{

41 

EOF

 1

42 

vars

 1

47 

do

52 

join

 1

57 

let

64 

}

160 

}

 1

88 

let

 1

95 

?

10 

107 

}

11 

 1

143 

int

12 

153 

}

13 

65 

int id float (

14 

72 

int id float (

15 

 1

67 

op1

16 

71 

logic { let ? relation ; )

17 

 1

79 

(

18 

 1

82 

id

19 

 1

84 

float

20 

86 

int

21 

 1

74 

op2

22 

78 

op1 logic { let ? relation ; )

23 

 1

108 

logic

24 

116 

{ let ?

25 

 1

117 

{

26 

 1

120 

let

27 

126 

?

28 

 1

137 

or

29 

141 

let ? }

30 

 1

154 

,

31 

159 

;

32 

33 

 StIf.push (new Integer(0)); ignore.t();

33 

1

34 

34 

35 

 VectNames.add(currentLexem.textOfWord);

35 

1

36 

36 

37 

 ignore.f();

37 

1

38 

38 

1

42 

39 

1

40 

40 

1

32 

41 

1

42 

42 

1

43 

43 

1

44 

44 

1

57 

45 

1

160 

46 

1

47 

 VectPFRTotal.add(VectPFRBlock.clone()); VectPFRBlock.removeAllElements();

47 

1

48 

48 

1

49 

49 

1

88 

50 

1

160 

51 

1

52 

 VectPFRTotal.add(VectPFRBlock.clone()); VectPFRBlock.removeAllElements();

52 

1

53 

53 

54 

 ignore.t(); VectNames.remove(VectNames.size()-1);

54 

1

55 

55 

1

143 

56 

1

57 

 ignore.f();

57 

1

58 

58 

59 

 VectPFRBlock.add(currentLexem.textOfWord);

59 

1

60 

60 

1

65 

61 

62 

 VectPFRBlock.add("let");

62 

1

63 

63 

1

57 

64 

1

65 

65 

1

72 

66 

1

67 

67 

68 

 StOp.push (currentLexem.textOfWord);

68 

1

69 

69 

1

65 

70 

1

71 

 VectPFRBlock.add(StOp.pop ());

71 

1

72 

72 

1

79 

73 

1

74 

74 

75 

 StOp.push (currentLexem.textOfWord);

75 

1

76 

76 

1

72 

77 

1

78 

 VectPFRBlock.add(StOp.pop ());

78 

1

79 

79 

1

80 

80 

1

65 

81 

1

1

82 

82 

83 

 VectPFRBlock.add(currentLexem.textOfWord);

83 

1

1

84 

84 

85 

 VectPFRBlock.add(currentLexem.textOfWord);

85 

1

1

86 

86 

87 

 VectPFRBlock.add(currentLexem.textOfWord);

87 

1

1

88 

88 

1

89 

89 

90 

 VectPFRBlock.add(currentLexem.textOfWord);

90 

1

91 

91 

1

65 

92 

93 

 VectPFRBlock.add("let");

93 

1

94 

94 

1

88 

95 

1

96 

96 

1

65 

97 

98 

 StOp.push (currentLexem.textOfWord);

98 

1

99 

99 

1

65 

100 

101 

 VectPFRBlock.add(StOp.pop ());

101 

1

108 

102 

103 

 StIf .push (new Integer(++CntIf)); VectPFRBlock.add("Label1_"+StIf.peek()); VectPFRBlock.add("JmpF");

103 

1

117 

104 

105 

 VectPFRBlock.add("Label2_"+StIf.peek()); VectPFRBlock.add("Jmp");

105 

1

137 

106 

1

88 

107 

1

108 

108 

109 

 StOp.push (currentLexem.textOfWord);

109 

1

110 

110 

1

65 

111 

112 

 StOp.push (currentLexem.textOfWord);

112 

1

113 

113 

1

65 

114 

115 

 VectPFRBlock.add(StOp.pop ()); VectPFRBlock.add(StOp.pop ());

115 

1

108 

116 

1

117 

117 

1

118 

118 

1

88 

119 

1

1

120 

120 

1

121 

121 

122 

 VectPFRBlock.add(currentLexem.textOfWord);

122 

1

123 

123 

1

65 

124 

125 

 VectPFRBlock.add("let");

125 

1

1

126 

126 

1

127 

127 

1

65 

128 

129 

 StOp.push (currentLexem.textOfWord);

129 

1

130 

130 

1

65 

131 

132 

 VectPFRBlock.add(StOp.pop ());

132 

1

108 

133 

134 

 StIf .push (new Integer(++CntIf)); VectPFRBlock.add("Label1_"+StIf.peek()); VectPFRBlock.add("JmpF");

134 

1

117 

135 

136 

 VectPFRBlock.add("Label2_"+StIf.peek()); VectPFRBlock.add("Jmp");

136 

1

137 

137 

1

138 

138 

139 

 VectPentadMarks.add("Label1_"+StIf.peek()+":"); VectPFRBlock.add(VectPentadMarks.lastElement());

139 

1

117 

140 

1

141 

 VectPentadMarks.add("Label2_"+StIf.pop()+":"); VectPFRBlock.add(VectPentadMarks.lastElement());

141 

142 

142 

1

143 

 VectPentadMarks.add("Label1_"+StIf.pop()+":"); VectPFRBlock.remove(VectPFRBlock.size()-1); VectPFRBlock.remove(VectPFRBlock.size()-1); VectPFRBlock.add(VectPentadMarks.lastElement());

143 

1

144 

144 

1

145 

145 

1

146 

146 

1

147 

147 

1

148 

148 

1

149 

149 

1

150 

150 

1

154 

151 

1

152 

152 

1

143 

153 

1

154 

154 

1

155 

155 

1

156 

156 

1

157 

157 

1

158 

158 

1

154 

159 

1

160 

160 

1

161 

 Object Mark = (Object)(new String(""));for (int i=0; i