You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If a terminal is specified in other than the first term, racc generates an error. For example, this will not generate a Ruby file
class Parse
rule
target : a
{ p 'target:a' }
a : :TERM1 # first term _can_ be a terminal
{ p 'a:TERM1' }
| :TERM2 # other terms _cannot_ begin with terminals
{ p 'a:TERM2'}
end
If the term does not begin with a terminal but contains a terminal, the Ruby file will be generated but will generate an error when executed. For example, this will generate a Ruby file
class Parse
rule
target : a
{ p 'target:a' }
a : :TERM1 # first term _can_ be terminal
{ p 'a:TERM1' }
| term3_sym
{ p 'a:term3_sym' }
| term3_sym term1_sym
{ p 'a:term3_sym, a:term1_sym'}
| term3_sym :TERM2 # other terms _cannot_ contain terminals
{ p 'a:term3_sym, a:TERM2'}
term1_sym : :TERM1
{ p 'term1_sym:TERM1' }
term3_sym : :TERM3
{ p 'term3_sym:TERM3' }
end
but this test will fail
require_relative '../lib/racc_fail'
p 'Test Fail'
parser = Parse.new
tests = [
[[:TERM1, 'term1']],
[[:TERM3, 'term3']],
[[:TERM3, 'term3'], [:TERM1, 'term1']],
[[:TERM3, 'term3'], [:TERM2, 'term2']] # fails
]
tests.each do |test|
puts
p "test input = #{test}"
p "result = #{parser.parse(test)}"
end
The text was updated successfully, but these errors were encountered:
If a terminal is specified in other than the first term, racc generates an error. For example, this will not generate a Ruby file
If the term does not begin with a terminal but contains a terminal, the Ruby file will be generated but will generate an error when executed. For example, this will generate a Ruby file
but this test will fail
The text was updated successfully, but these errors were encountered: