From 763e04fec94ff9278252265841a51e244e11d388 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Fri, 25 Dec 2009 13:39:33 -0800 Subject: [PATCH] cleaned up the for grammar and eliminated a shift/reduce conflict --- lib/coffee_script/grammar.y | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index f9c4c2df..5dd42d3b 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -35,9 +35,9 @@ prechigh right RETURN preclow -# We expect 4 shift/reduce errors for optional syntax. +# We expect 3 shift/reduce errors for optional syntax. # There used to be 252 -- greatly improved. -expect 4 +expect 3 rule @@ -317,18 +317,19 @@ rule # Array comprehensions, including guard and current index. For: - Expression FOR IDENTIFIER - IN PureExpression "." { result = ForNode.new(val[0], val[4], val[2], nil) } - | Expression FOR - IDENTIFIER "," IDENTIFIER - IN PureExpression "." { result = ForNode.new(val[0], val[6], val[2], nil, val[4]) } - | Expression FOR IDENTIFIER - IN PureExpression - IF Expression "." { result = ForNode.new(val[0], val[4], val[2], val[6]) } - | Expression FOR - IDENTIFIER "," IDENTIFIER - IN PureExpression - IF Expression "." { result = ForNode.new(val[0], val[6], val[2], val[8], val[4]) } + Expression FOR + ForVariables ForBody { result = ForNode.new(val[0], val[3][0], val[2][0], val[3][1], val[2][1]) } + ; + + ForVariables: + IDENTIFIER { result = val } + | IDENTIFIER "," IDENTIFIER { result = [val[0], val[2]] } + ; + + ForBody: + IN PureExpression "." { result = [val[1]] } + | IN PureExpression + IF Expression "." { result = [val[1], val[3]] } ; # Switch/When blocks.