antelope 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +25 -25
  3. data/.rspec +3 -3
  4. data/.travis.yml +10 -10
  5. data/.yardopts +7 -7
  6. data/CONTRIBUTING.md +50 -38
  7. data/GENERATORS.md +180 -124
  8. data/Gemfile +7 -7
  9. data/LICENSE.txt +22 -22
  10. data/README.md +240 -104
  11. data/Rakefile +2 -2
  12. data/TODO.md +58 -58
  13. data/antelope.gemspec +29 -28
  14. data/bin/antelope +7 -7
  15. data/examples/deterministic.ace +35 -35
  16. data/examples/example.ace +52 -51
  17. data/examples/example.ace.err +192 -192
  18. data/examples/example.ace.inf +432 -432
  19. data/examples/example.ate +70 -70
  20. data/examples/example.ate.err +192 -192
  21. data/examples/example.ate.inf +432 -432
  22. data/examples/liquidscript.ace +233 -233
  23. data/examples/simple.ace +22 -22
  24. data/lib/antelope/ace/compiler.rb +334 -334
  25. data/lib/antelope/ace/errors.rb +30 -30
  26. data/lib/antelope/ace/scanner/argument.rb +57 -57
  27. data/lib/antelope/ace/scanner/first.rb +89 -89
  28. data/lib/antelope/ace/scanner/second.rb +178 -178
  29. data/lib/antelope/ace/scanner/third.rb +27 -27
  30. data/lib/antelope/ace/scanner.rb +144 -144
  31. data/lib/antelope/ace.rb +47 -47
  32. data/lib/antelope/cli.rb +60 -60
  33. data/lib/antelope/errors.rb +25 -25
  34. data/lib/antelope/generation/constructor/first.rb +86 -86
  35. data/lib/antelope/generation/constructor/follow.rb +105 -105
  36. data/lib/antelope/generation/constructor/nullable.rb +64 -64
  37. data/lib/antelope/generation/constructor.rb +127 -127
  38. data/lib/antelope/generation/errors.rb +17 -17
  39. data/lib/antelope/generation/null.rb +13 -13
  40. data/lib/antelope/generation/recognizer/rule.rb +216 -216
  41. data/lib/antelope/generation/recognizer/state.rb +129 -129
  42. data/lib/antelope/generation/recognizer.rb +177 -177
  43. data/lib/antelope/generation/tableizer.rb +176 -176
  44. data/lib/antelope/generation.rb +15 -15
  45. data/lib/antelope/generator/base/coerce.rb +115 -0
  46. data/lib/antelope/generator/base/extra.rb +50 -0
  47. data/lib/antelope/generator/base.rb +134 -264
  48. data/lib/antelope/generator/c.rb +11 -11
  49. data/lib/antelope/generator/c_header.rb +105 -105
  50. data/lib/antelope/generator/c_source.rb +39 -39
  51. data/lib/antelope/generator/error.rb +34 -34
  52. data/lib/antelope/generator/group.rb +60 -57
  53. data/lib/antelope/generator/html.rb +51 -51
  54. data/lib/antelope/generator/info.rb +47 -47
  55. data/lib/antelope/generator/null.rb +18 -18
  56. data/lib/antelope/generator/output.rb +17 -17
  57. data/lib/antelope/generator/ruby.rb +112 -79
  58. data/lib/antelope/generator/templates/c_header.ant +36 -36
  59. data/lib/antelope/generator/templates/c_source.ant +202 -202
  60. data/lib/antelope/generator/templates/error.erb +40 -0
  61. data/lib/antelope/generator/templates/html/antelope.css +53 -1
  62. data/lib/antelope/generator/templates/html/antelope.html +82 -1
  63. data/lib/antelope/generator/templates/html/antelope.js +9 -1
  64. data/lib/antelope/generator/templates/html/css.ant +53 -53
  65. data/lib/antelope/generator/templates/html/html.ant +82 -82
  66. data/lib/antelope/generator/templates/html/js.ant +9 -9
  67. data/lib/antelope/generator/templates/info.erb +61 -0
  68. data/lib/antelope/generator/templates/{ruby.ant → ruby.erb} +171 -178
  69. data/lib/antelope/generator.rb +62 -66
  70. data/lib/antelope/grammar/generation.rb +76 -76
  71. data/lib/antelope/grammar/loading.rb +84 -84
  72. data/lib/antelope/grammar/precedence.rb +59 -59
  73. data/lib/antelope/grammar/precedences.rb +64 -64
  74. data/lib/antelope/grammar/production.rb +56 -56
  75. data/lib/antelope/grammar/productions.rb +154 -154
  76. data/lib/antelope/grammar/symbols.rb +64 -64
  77. data/lib/antelope/grammar/token/epsilon.rb +23 -23
  78. data/lib/antelope/grammar/token/error.rb +24 -24
  79. data/lib/antelope/grammar/token/nonterminal.rb +15 -15
  80. data/lib/antelope/grammar/token/terminal.rb +15 -15
  81. data/lib/antelope/grammar/token.rb +231 -231
  82. data/lib/antelope/grammar.rb +68 -68
  83. data/lib/antelope/version.rb +6 -6
  84. data/lib/antelope.rb +18 -19
  85. data/optimizations.txt +42 -42
  86. data/spec/antelope/ace/compiler_spec.rb +60 -60
  87. data/spec/antelope/ace/scanner_spec.rb +27 -27
  88. data/spec/antelope/generation/constructor_spec.rb +131 -131
  89. data/spec/fixtures/simple.ace +22 -22
  90. data/spec/spec_helper.rb +39 -39
  91. data/spec/support/benchmark_helper.rb +5 -5
  92. data/spec/support/grammar_helper.rb +14 -14
  93. data/subl/Ace (Ruby).JSON-tmLanguage +94 -94
  94. data/subl/Ace (Ruby).tmLanguage +153 -153
  95. metadata +22 -11
  96. data/lib/antelope/generator/templates/error.ant +0 -34
  97. data/lib/antelope/generator/templates/info.ant +0 -53
  98. data/lib/antelope/template/compiler.rb +0 -78
  99. data/lib/antelope/template/errors.rb +0 -9
  100. data/lib/antelope/template/scanner.rb +0 -109
  101. data/lib/antelope/template.rb +0 -64
  102. data/spec/antelope/template_spec.rb +0 -50
data/examples/example.ace CHANGED
@@ -1,51 +1,52 @@
1
- %require "~> 0.1"
2
- %generator "ruby"
3
-
4
- %null.data ruby.error-class { SyntaxError }
5
- %panic-mode true
6
- %output.verbose true
7
- %terminal NUMBER
8
- %terminal MULTIPLY "*"
9
- %terminal EXPONENTIATE "^"
10
- %terminal DIVIDE "/"
11
- %terminal ADD "+"
12
- %terminal SUBTRACT "-"
13
- %terminal LPAREN "("
14
- %terminal RPAREN ")"
15
-
16
- %right EXPONENTIATE
17
- %left MULTIPLY DIVIDE
18
- %left ADD SUBTRACT
19
-
20
- %%
21
-
22
- expression: NUMBER { |match| match[0][1] }
23
- | expression EXPONENTIATE expression { |match| match[0]** match[2] }
24
- | expression ADD expression { |match| match[0] + match[2] }
25
- | expression SUBTRACT expression { |match| match[0] - match[2] }
26
- | expression MULTIPLY expression { |match| match[0] * match[2] }
27
- | expression DIVIDE expression { |match| match[0] / match[2] }
28
- | LPAREN expression RPAREN { |match| match[1] }
29
- | LPAREN error RPAREN { |match| match[1] }
30
-
31
- %%
32
-
33
- class ExampleParser
34
- %{write}
35
-
36
- def type(token)
37
- token[0]
38
- end
39
- end
40
-
41
- input = [
42
- [:LPAREN],
43
- [:NUMBER, 2],
44
- [:ADD],
45
- [:ADD, 2],
46
- [:RPAREN],
47
- [:MULTIPLY],
48
- [:NUMBER, 3]
49
- ]
50
-
51
- p ExampleParser.new.parse(input)
1
+ %require "~> 0.1"
2
+ %generator "ruby"
3
+
4
+ %null.data ruby.error-class { SyntaxError }
5
+ %output.panic-mode true
6
+ %output.verbose true
7
+ %ruby.indent 1
8
+ %terminal NUMBER
9
+ %terminal MULTIPLY "*"
10
+ %terminal EXPONENTIATE "^"
11
+ %terminal DIVIDE "/"
12
+ %terminal ADD "+"
13
+ %terminal SUBTRACT "-"
14
+ %terminal LPAREN "("
15
+ %terminal RPAREN ")"
16
+
17
+ %right EXPONENTIATE
18
+ %left MULTIPLY DIVIDE
19
+ %left ADD SUBTRACT
20
+
21
+ %%
22
+
23
+ expression: NUMBER { match[0][1] }
24
+ | expression EXPONENTIATE expression { match[0]** match[2] }
25
+ | expression ADD expression { match[0] + match[2] }
26
+ | expression SUBTRACT expression { match[0] - match[2] }
27
+ | expression MULTIPLY expression { match[0] * match[2] }
28
+ | expression DIVIDE expression { match[0] / match[2] }
29
+ | LPAREN expression RPAREN { match[1] }
30
+ | LPAREN error RPAREN { match[1] }
31
+
32
+ %%
33
+
34
+ class ExampleParser
35
+ %{write}
36
+
37
+ def type(token)
38
+ token[0]
39
+ end
40
+ end
41
+
42
+ input = [
43
+ [:LPAREN],
44
+ [:NUMBER, 2],
45
+ [:ADD],
46
+ [:ADD, 2],
47
+ [:RPAREN],
48
+ [:MULTIPLY],
49
+ [:NUMBER, 3]
50
+ ]
51
+
52
+ p ExampleParser.new.parse(input)
@@ -1,192 +1,192 @@
1
- Productions:
2
- 15/n1: expression → NUMBER { |a| a[1] }
3
- 26/n0: $start → expression $end
4
- 79/r4: expression → expression "^" expression { |a, _, b| a** b }
5
- 85/l2: expression → expression "+" expression { |a, _, b| a + b }
6
- 91/l2: expression → expression "-" expression { |a, _, b| a - b }
7
- 97/l3: expression → expression "*" expression { |a, _, b| a * b }
8
- 103/l3: expression → expression "/" expression { |a, _, b| a / b }
9
- 109/n1: expression → "(" expression ")" { |_, a, _| a }
10
- 110/n1: expression → "(" $error ")" { |_, e, _| e[1] }
11
-
12
- Error:
13
- Conflicts in State 12:
14
- On EXPONENTIATE (resolved):
15
- state 5/reduce 2 (r4 vs r4, -1)
16
- Rules:
17
- 79/r4: expression → expression "^" expression •
18
- {$end, "^", "+", "-", "*", "/", ")"}
19
- Transitions:
20
- 80/r4: expression → expression • "^" expression
21
- On ADD (resolved):
22
- state 6/reduce 2 (r4 vs l2, 1)
23
- Rules:
24
- 79/r4: expression → expression "^" expression •
25
- {$end, "^", "+", "-", "*", "/", ")"}
26
- Transitions:
27
- 81/l2: expression → expression • "+" expression
28
- On SUBTRACT (resolved):
29
- state 7/reduce 2 (r4 vs l2, 1)
30
- Rules:
31
- 79/r4: expression → expression "^" expression •
32
- {$end, "^", "+", "-", "*", "/", ")"}
33
- Transitions:
34
- 82/l2: expression → expression • "-" expression
35
- On MULTIPLY (resolved):
36
- state 8/reduce 2 (r4 vs l3, 1)
37
- Rules:
38
- 79/r4: expression → expression "^" expression •
39
- {$end, "^", "+", "-", "*", "/", ")"}
40
- Transitions:
41
- 83/l3: expression → expression • "*" expression
42
- On DIVIDE (resolved):
43
- state 9/reduce 2 (r4 vs l3, 1)
44
- Rules:
45
- 79/r4: expression → expression "^" expression •
46
- {$end, "^", "+", "-", "*", "/", ")"}
47
- Transitions:
48
- 84/l3: expression → expression • "/" expression
49
- Conflicts in State 13:
50
- On EXPONENTIATE (resolved):
51
- state 5/reduce 3 (l2 vs r4, -1)
52
- Rules:
53
- 85/l2: expression → expression "+" expression •
54
- {$end, "^", "+", "-", "*", "/", ")"}
55
- Transitions:
56
- 86/r4: expression → expression • "^" expression
57
- On ADD (resolved):
58
- state 6/reduce 3 (l2 vs l2, 1)
59
- Rules:
60
- 85/l2: expression → expression "+" expression •
61
- {$end, "^", "+", "-", "*", "/", ")"}
62
- Transitions:
63
- 87/l2: expression → expression • "+" expression
64
- On SUBTRACT (resolved):
65
- state 7/reduce 3 (l2 vs l2, 1)
66
- Rules:
67
- 85/l2: expression → expression "+" expression •
68
- {$end, "^", "+", "-", "*", "/", ")"}
69
- Transitions:
70
- 88/l2: expression → expression • "-" expression
71
- On MULTIPLY (resolved):
72
- state 8/reduce 3 (l2 vs l3, -1)
73
- Rules:
74
- 85/l2: expression → expression "+" expression •
75
- {$end, "^", "+", "-", "*", "/", ")"}
76
- Transitions:
77
- 89/l3: expression → expression • "*" expression
78
- On DIVIDE (resolved):
79
- state 9/reduce 3 (l2 vs l3, -1)
80
- Rules:
81
- 85/l2: expression → expression "+" expression •
82
- {$end, "^", "+", "-", "*", "/", ")"}
83
- Transitions:
84
- 90/l3: expression → expression • "/" expression
85
- Conflicts in State 14:
86
- On EXPONENTIATE (resolved):
87
- state 5/reduce 4 (l2 vs r4, -1)
88
- Rules:
89
- 91/l2: expression → expression "-" expression •
90
- {$end, "^", "+", "-", "*", "/", ")"}
91
- Transitions:
92
- 92/r4: expression → expression • "^" expression
93
- On ADD (resolved):
94
- state 6/reduce 4 (l2 vs l2, 1)
95
- Rules:
96
- 91/l2: expression → expression "-" expression •
97
- {$end, "^", "+", "-", "*", "/", ")"}
98
- Transitions:
99
- 93/l2: expression → expression • "+" expression
100
- On SUBTRACT (resolved):
101
- state 7/reduce 4 (l2 vs l2, 1)
102
- Rules:
103
- 91/l2: expression → expression "-" expression •
104
- {$end, "^", "+", "-", "*", "/", ")"}
105
- Transitions:
106
- 94/l2: expression → expression • "-" expression
107
- On MULTIPLY (resolved):
108
- state 8/reduce 4 (l2 vs l3, -1)
109
- Rules:
110
- 91/l2: expression → expression "-" expression •
111
- {$end, "^", "+", "-", "*", "/", ")"}
112
- Transitions:
113
- 95/l3: expression → expression • "*" expression
114
- On DIVIDE (resolved):
115
- state 9/reduce 4 (l2 vs l3, -1)
116
- Rules:
117
- 91/l2: expression → expression "-" expression •
118
- {$end, "^", "+", "-", "*", "/", ")"}
119
- Transitions:
120
- 96/l3: expression → expression • "/" expression
121
- Conflicts in State 15:
122
- On EXPONENTIATE (resolved):
123
- state 5/reduce 5 (l3 vs r4, -1)
124
- Rules:
125
- 97/l3: expression → expression "*" expression •
126
- {$end, "^", "+", "-", "*", "/", ")"}
127
- Transitions:
128
- 98/r4: expression → expression • "^" expression
129
- On ADD (resolved):
130
- state 6/reduce 5 (l3 vs l2, 1)
131
- Rules:
132
- 97/l3: expression → expression "*" expression •
133
- {$end, "^", "+", "-", "*", "/", ")"}
134
- Transitions:
135
- 99/l2: expression → expression • "+" expression
136
- On SUBTRACT (resolved):
137
- state 7/reduce 5 (l3 vs l2, 1)
138
- Rules:
139
- 97/l3: expression → expression "*" expression •
140
- {$end, "^", "+", "-", "*", "/", ")"}
141
- Transitions:
142
- 100/l2: expression → expression • "-" expression
143
- On MULTIPLY (resolved):
144
- state 8/reduce 5 (l3 vs l3, 1)
145
- Rules:
146
- 97/l3: expression → expression "*" expression •
147
- {$end, "^", "+", "-", "*", "/", ")"}
148
- Transitions:
149
- 101/l3: expression → expression • "*" expression
150
- On DIVIDE (resolved):
151
- state 9/reduce 5 (l3 vs l3, 1)
152
- Rules:
153
- 97/l3: expression → expression "*" expression •
154
- {$end, "^", "+", "-", "*", "/", ")"}
155
- Transitions:
156
- 102/l3: expression → expression • "/" expression
157
- Conflicts in State 16:
158
- On EXPONENTIATE (resolved):
159
- state 5/reduce 6 (l3 vs r4, -1)
160
- Rules:
161
- 103/l3: expression → expression "/" expression •
162
- {$end, "^", "+", "-", "*", "/", ")"}
163
- Transitions:
164
- 104/r4: expression → expression • "^" expression
165
- On ADD (resolved):
166
- state 6/reduce 6 (l3 vs l2, 1)
167
- Rules:
168
- 103/l3: expression → expression "/" expression •
169
- {$end, "^", "+", "-", "*", "/", ")"}
170
- Transitions:
171
- 105/l2: expression → expression • "+" expression
172
- On SUBTRACT (resolved):
173
- state 7/reduce 6 (l3 vs l2, 1)
174
- Rules:
175
- 103/l3: expression → expression "/" expression •
176
- {$end, "^", "+", "-", "*", "/", ")"}
177
- Transitions:
178
- 106/l2: expression → expression • "-" expression
179
- On MULTIPLY (resolved):
180
- state 8/reduce 6 (l3 vs l3, 1)
181
- Rules:
182
- 103/l3: expression → expression "/" expression •
183
- {$end, "^", "+", "-", "*", "/", ")"}
184
- Transitions:
185
- 107/l3: expression → expression • "*" expression
186
- On DIVIDE (resolved):
187
- state 9/reduce 6 (l3 vs l3, 1)
188
- Rules:
189
- 103/l3: expression → expression "/" expression •
190
- {$end, "^", "+", "-", "*", "/", ")"}
191
- Transitions:
192
- 108/l3: expression → expression • "/" expression
1
+ Productions:
2
+ 15/n1: expression → NUMBER { match[0][1] }
3
+ 26/n0: $start → expression $end
4
+ 79/r4: expression → expression "^" expression { match[0]** match[2] }
5
+ 85/l2: expression → expression "+" expression { match[0] + match[2] }
6
+ 91/l2: expression → expression "-" expression { match[0] - match[2] }
7
+ 97/l3: expression → expression "*" expression { match[0] * match[2] }
8
+ 103/l3: expression → expression "/" expression { match[0] / match[2] }
9
+ 109/n1: expression → "(" expression ")" { match[1] }
10
+ 110/n1: expression → "(" $error ")" { match[1] }
11
+
12
+ Error:
13
+ Conflicts in State 12:
14
+ On EXPONENTIATE (resolved):
15
+ state 5/reduce 2 (r4 vs r4, -1)
16
+ Rules:
17
+ 79/r4: expression → expression "^" expression •
18
+ {$end, "^", "+", "-", "*", "/", ")"}
19
+ Transitions:
20
+ 80/r4: expression → expression • "^" expression
21
+ On ADD (resolved):
22
+ state 6/reduce 2 (r4 vs l2, 1)
23
+ Rules:
24
+ 79/r4: expression → expression "^" expression •
25
+ {$end, "^", "+", "-", "*", "/", ")"}
26
+ Transitions:
27
+ 81/l2: expression → expression • "+" expression
28
+ On SUBTRACT (resolved):
29
+ state 7/reduce 2 (r4 vs l2, 1)
30
+ Rules:
31
+ 79/r4: expression → expression "^" expression •
32
+ {$end, "^", "+", "-", "*", "/", ")"}
33
+ Transitions:
34
+ 82/l2: expression → expression • "-" expression
35
+ On MULTIPLY (resolved):
36
+ state 8/reduce 2 (r4 vs l3, 1)
37
+ Rules:
38
+ 79/r4: expression → expression "^" expression •
39
+ {$end, "^", "+", "-", "*", "/", ")"}
40
+ Transitions:
41
+ 83/l3: expression → expression • "*" expression
42
+ On DIVIDE (resolved):
43
+ state 9/reduce 2 (r4 vs l3, 1)
44
+ Rules:
45
+ 79/r4: expression → expression "^" expression •
46
+ {$end, "^", "+", "-", "*", "/", ")"}
47
+ Transitions:
48
+ 84/l3: expression → expression • "/" expression
49
+ Conflicts in State 13:
50
+ On EXPONENTIATE (resolved):
51
+ state 5/reduce 3 (l2 vs r4, -1)
52
+ Rules:
53
+ 85/l2: expression → expression "+" expression •
54
+ {$end, "^", "+", "-", "*", "/", ")"}
55
+ Transitions:
56
+ 86/r4: expression → expression • "^" expression
57
+ On ADD (resolved):
58
+ state 6/reduce 3 (l2 vs l2, 1)
59
+ Rules:
60
+ 85/l2: expression → expression "+" expression •
61
+ {$end, "^", "+", "-", "*", "/", ")"}
62
+ Transitions:
63
+ 87/l2: expression → expression • "+" expression
64
+ On SUBTRACT (resolved):
65
+ state 7/reduce 3 (l2 vs l2, 1)
66
+ Rules:
67
+ 85/l2: expression → expression "+" expression •
68
+ {$end, "^", "+", "-", "*", "/", ")"}
69
+ Transitions:
70
+ 88/l2: expression → expression • "-" expression
71
+ On MULTIPLY (resolved):
72
+ state 8/reduce 3 (l2 vs l3, -1)
73
+ Rules:
74
+ 85/l2: expression → expression "+" expression •
75
+ {$end, "^", "+", "-", "*", "/", ")"}
76
+ Transitions:
77
+ 89/l3: expression → expression • "*" expression
78
+ On DIVIDE (resolved):
79
+ state 9/reduce 3 (l2 vs l3, -1)
80
+ Rules:
81
+ 85/l2: expression → expression "+" expression •
82
+ {$end, "^", "+", "-", "*", "/", ")"}
83
+ Transitions:
84
+ 90/l3: expression → expression • "/" expression
85
+ Conflicts in State 14:
86
+ On EXPONENTIATE (resolved):
87
+ state 5/reduce 4 (l2 vs r4, -1)
88
+ Rules:
89
+ 91/l2: expression → expression "-" expression •
90
+ {$end, "^", "+", "-", "*", "/", ")"}
91
+ Transitions:
92
+ 92/r4: expression → expression • "^" expression
93
+ On ADD (resolved):
94
+ state 6/reduce 4 (l2 vs l2, 1)
95
+ Rules:
96
+ 91/l2: expression → expression "-" expression •
97
+ {$end, "^", "+", "-", "*", "/", ")"}
98
+ Transitions:
99
+ 93/l2: expression → expression • "+" expression
100
+ On SUBTRACT (resolved):
101
+ state 7/reduce 4 (l2 vs l2, 1)
102
+ Rules:
103
+ 91/l2: expression → expression "-" expression •
104
+ {$end, "^", "+", "-", "*", "/", ")"}
105
+ Transitions:
106
+ 94/l2: expression → expression • "-" expression
107
+ On MULTIPLY (resolved):
108
+ state 8/reduce 4 (l2 vs l3, -1)
109
+ Rules:
110
+ 91/l2: expression → expression "-" expression •
111
+ {$end, "^", "+", "-", "*", "/", ")"}
112
+ Transitions:
113
+ 95/l3: expression → expression • "*" expression
114
+ On DIVIDE (resolved):
115
+ state 9/reduce 4 (l2 vs l3, -1)
116
+ Rules:
117
+ 91/l2: expression → expression "-" expression •
118
+ {$end, "^", "+", "-", "*", "/", ")"}
119
+ Transitions:
120
+ 96/l3: expression → expression • "/" expression
121
+ Conflicts in State 15:
122
+ On EXPONENTIATE (resolved):
123
+ state 5/reduce 5 (l3 vs r4, -1)
124
+ Rules:
125
+ 97/l3: expression → expression "*" expression •
126
+ {$end, "^", "+", "-", "*", "/", ")"}
127
+ Transitions:
128
+ 98/r4: expression → expression • "^" expression
129
+ On ADD (resolved):
130
+ state 6/reduce 5 (l3 vs l2, 1)
131
+ Rules:
132
+ 97/l3: expression → expression "*" expression •
133
+ {$end, "^", "+", "-", "*", "/", ")"}
134
+ Transitions:
135
+ 99/l2: expression → expression • "+" expression
136
+ On SUBTRACT (resolved):
137
+ state 7/reduce 5 (l3 vs l2, 1)
138
+ Rules:
139
+ 97/l3: expression → expression "*" expression •
140
+ {$end, "^", "+", "-", "*", "/", ")"}
141
+ Transitions:
142
+ 100/l2: expression → expression • "-" expression
143
+ On MULTIPLY (resolved):
144
+ state 8/reduce 5 (l3 vs l3, 1)
145
+ Rules:
146
+ 97/l3: expression → expression "*" expression •
147
+ {$end, "^", "+", "-", "*", "/", ")"}
148
+ Transitions:
149
+ 101/l3: expression → expression • "*" expression
150
+ On DIVIDE (resolved):
151
+ state 9/reduce 5 (l3 vs l3, 1)
152
+ Rules:
153
+ 97/l3: expression → expression "*" expression •
154
+ {$end, "^", "+", "-", "*", "/", ")"}
155
+ Transitions:
156
+ 102/l3: expression → expression • "/" expression
157
+ Conflicts in State 16:
158
+ On EXPONENTIATE (resolved):
159
+ state 5/reduce 6 (l3 vs r4, -1)
160
+ Rules:
161
+ 103/l3: expression → expression "/" expression •
162
+ {$end, "^", "+", "-", "*", "/", ")"}
163
+ Transitions:
164
+ 104/r4: expression → expression • "^" expression
165
+ On ADD (resolved):
166
+ state 6/reduce 6 (l3 vs l2, 1)
167
+ Rules:
168
+ 103/l3: expression → expression "/" expression •
169
+ {$end, "^", "+", "-", "*", "/", ")"}
170
+ Transitions:
171
+ 105/l2: expression → expression • "+" expression
172
+ On SUBTRACT (resolved):
173
+ state 7/reduce 6 (l3 vs l2, 1)
174
+ Rules:
175
+ 103/l3: expression → expression "/" expression •
176
+ {$end, "^", "+", "-", "*", "/", ")"}
177
+ Transitions:
178
+ 106/l2: expression → expression • "-" expression
179
+ On MULTIPLY (resolved):
180
+ state 8/reduce 6 (l3 vs l3, 1)
181
+ Rules:
182
+ 103/l3: expression → expression "/" expression •
183
+ {$end, "^", "+", "-", "*", "/", ")"}
184
+ Transitions:
185
+ 107/l3: expression → expression • "*" expression
186
+ On DIVIDE (resolved):
187
+ state 9/reduce 6 (l3 vs l3, 1)
188
+ Rules:
189
+ 103/l3: expression → expression "/" expression •
190
+ {$end, "^", "+", "-", "*", "/", ")"}
191
+ Transitions:
192
+ 108/l3: expression → expression • "/" expression