From: <fwi...@us...> - 2011-03-28 01:33:39
|
Revision: 7271 http://jython.svn.sourceforge.net/jython/?rev=7271&view=rev Author: fwierzbicki Date: 2011-03-28 01:33:33 +0000 (Mon, 28 Mar 2011) Log Message: ----------- Merge relevant grammar fixes from trunk. Modified Paths: -------------- branches/Release_2_5maint/jython/grammar/Python.g Modified: branches/Release_2_5maint/jython/grammar/Python.g =================================================================== --- branches/Release_2_5maint/jython/grammar/Python.g 2011-03-28 01:33:05 UTC (rev 7270) +++ branches/Release_2_5maint/jython/grammar/Python.g 2011-03-28 01:33:33 UTC (rev 7271) @@ -205,15 +205,14 @@ * a = [3, * 4] */ +int implicitLineJoiningLevel = 0; +int startPos=-1; //For use in partial parsing. public boolean eofWhileNested = false; public boolean partial = false; public boolean single = false; -int implicitLineJoiningLevel = 0; -int startPos=-1; - //If you want to use another error recovery mechanism change this //and the same one in the parser. private ErrorHandler errorHandler; @@ -268,6 +267,8 @@ } } +//START OF PARSER RULES + //single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE single_input @init { @@ -319,8 +320,9 @@ : (NEWLINE | stmt { - if ($stmt.stypes != null) - {stypes.addAll($stmt.stypes);} + if ($stmt.stypes != null) { + stypes.addAll($stmt.stypes); + } } )* EOF { @@ -447,8 +449,13 @@ //funcdef: [decorators] 'def' NAME parameters ':' suite funcdef -@init { stmt stype = null; } -@after { $funcdef.tree = stype; } +@init { + stmt stype = null; +} + +@after { + $funcdef.tree = stype; +} : decorators? DEF NAME parameters COLON suite[false] { Token t = $DEF; @@ -606,12 +613,16 @@ | (testlist[null] ASSIGN) => lhs=testlist[expr_contextType.Store] ( | ((at=ASSIGN t+=testlist[expr_contextType.Store])+ - -> ^(ASSIGN<Assign>[$lhs.start, actions.makeAssignTargets(actions.castExpr($lhs.tree), $t), - actions.makeAssignValue($t)]) + { + stype = new Assign($lhs.tree, actions.makeAssignTargets( + actions.castExpr($lhs.tree), $t), actions.makeAssignValue($t)); + } ) | ((ay=ASSIGN y2+=yield_expr)+ - -> ^(ASSIGN<Assign>[$lhs.start, actions.makeAssignTargets(actions.castExpr($lhs.tree), $y2), - actions.makeAssignValue($y2)]) + { + stype = new Assign($lhs.start, actions.makeAssignTargets( + actions.castExpr($lhs.tree), $y2), actions.makeAssignValue($y2)); + } ) ) | lhs=testlist[expr_contextType.Load] @@ -626,29 +637,53 @@ augassign returns [operatorType op] : PLUSEQUAL - {$op = operatorType.Add;} + { + $op = operatorType.Add; + } | MINUSEQUAL - {$op = operatorType.Sub;} + { + $op = operatorType.Sub; + } | STAREQUAL - {$op = operatorType.Mult;} + { + $op = operatorType.Mult; + } | SLASHEQUAL - {$op = operatorType.Div;} + { + $op = operatorType.Div; + } | PERCENTEQUAL - {$op = operatorType.Mod;} + { + $op = operatorType.Mod; + } | AMPEREQUAL - {$op = operatorType.BitAnd;} + { + $op = operatorType.BitAnd; + } | VBAREQUAL - {$op = operatorType.BitOr;} + { + $op = operatorType.BitOr; + } | CIRCUMFLEXEQUAL - {$op = operatorType.BitXor;} + { + $op = operatorType.BitXor; + } | LEFTSHIFTEQUAL - {$op = operatorType.LShift;} + { + $op = operatorType.LShift; + } | RIGHTSHIFTEQUAL - {$op = operatorType.RShift;} + { + $op = operatorType.RShift; + } | DOUBLESTAREQUAL - {$op = operatorType.Pow;} + { + $op = operatorType.Pow; + } | DOUBLESLASHEQUAL - {$op = operatorType.FloorDiv;} + { + $op = operatorType.FloorDiv; + } ; //print_stmt: 'print' ( [ test (',' test)* [','] ] | @@ -991,6 +1026,7 @@ : (AS | NAME) expr[expr_contextType.Store] { $etype = actions.castExpr($expr.tree); + actions.checkAssign($etype); } ; @@ -1085,7 +1121,10 @@ [expr_contextType ctype] returns [Token leftTok] : NOT nt=not_test[ctype] -> ^(NOT<UnaryOp>[$NOT, unaryopType.Not, actions.castExpr($nt.tree)]) - | comparison[ctype] {$leftTok = $comparison.leftTok;} + | comparison[ctype] + { + $leftTok = $comparison.leftTok; + } ; //comparison: expr (comp_op expr)* @@ -1116,30 +1155,51 @@ comp_op returns [cmpopType op] : LESS - {$op = cmpopType.Lt;} + { + $op = cmpopType.Lt; + } | GREATER - {$op = cmpopType.Gt;} + { + $op = cmpopType.Gt; + } | EQUAL - {$op = cmpopType.Eq;} + { + $op = cmpopType.Eq; + } | GREATEREQUAL - {$op = cmpopType.GtE;} + { + $op = cmpopType.GtE; + } | LESSEQUAL - {$op = cmpopType.LtE;} + { + $op = cmpopType.LtE; + } | ALT_NOTEQUAL - {$op = cmpopType.NotEq;} + { + $op = cmpopType.NotEq; + } | NOTEQUAL - {$op = cmpopType.NotEq;} + { + $op = cmpopType.NotEq; + } | IN - {$op = cmpopType.In;} + { + $op = cmpopType.In; + } | NOT IN - {$op = cmpopType.NotIn;} + { + $op = cmpopType.NotIn; + } | IS - {$op = cmpopType.Is;} + { + $op = cmpopType.Is; + } | IS NOT - {$op = cmpopType.IsNot;} + { + $op = cmpopType.IsNot; + } ; - //expr: xor_expr ('|' xor_expr)* expr [expr_contextType ect] returns [Token leftTok] @@ -1242,9 +1302,13 @@ shift_op returns [operatorType op] : LEFTSHIFT - {$op = operatorType.LShift;} + { + $op = operatorType.LShift; + } | RIGHTSHIFT - {$op = operatorType.RShift;} + { + $op = operatorType.RShift; + } ; //arith_expr: term (('+'|'-') term)* @@ -1287,9 +1351,13 @@ arith_op returns [operatorType op] : PLUS - {$op = operatorType.Add;} + { + $op = operatorType.Add; + } | MINUS - {$op = operatorType.Sub;} + { + $op = operatorType.Sub; + } ; //term: factor (('*'|'/'|'%'|'//') factor)* @@ -1323,14 +1391,22 @@ term_op returns [operatorType op] - :STAR - {$op = operatorType.Mult;} - |SLASH - {$op = operatorType.Div;} - |PERCENT - {$op = operatorType.Mod;} - |DOUBLESLASH - {$op = operatorType.FloorDiv;} + : STAR + { + $op = operatorType.Mult; + } + | SLASH + { + $op = operatorType.Div; + } + | PERCENT + { + $op = operatorType.Mod; + } + | DOUBLESLASH + { + $op = operatorType.FloorDiv; + } ; //factor: ('+'|'-'|'~') factor | power @@ -1340,11 +1416,17 @@ $factor.tree = $etype; } : PLUS p=factor - {$etype = new UnaryOp($PLUS, unaryopType.UAdd, $p.etype);} + { + $etype = new UnaryOp($PLUS, unaryopType.UAdd, $p.etype); + } | MINUS m=factor - {$etype = actions.negate($MINUS, $m.etype);} + { + $etype = actions.negate($MINUS, $m.etype); + } | TILDE t=factor - {$etype = new UnaryOp($TILDE, unaryopType.Invert, $t.etype);} + { + $etype = new UnaryOp($TILDE, unaryopType.Invert, $t.etype); + } | power { $etype = actions.castExpr($power.tree); @@ -1399,7 +1481,10 @@ // NAME | NUMBER | STRING+) atom returns [Token lparen = null] - : LPAREN {$lparen = $LPAREN;} + : LPAREN + { + $lparen = $LPAREN; + } ( yield_expr -> yield_expr | testlist_gexp @@ -1475,8 +1560,7 @@ } : t+=test[$expr::ctype] ( ((options {k=2;}: c1=COMMA t+=test[$expr::ctype])* (c2=COMMA)? - -> { $c1 != null || $c2 != null }? - ^(COMMA<Tuple>[$testlist_gexp.start, actions.castExprs($t), $expr::ctype]) + -> { $c1 != null || $c2 != null }? ^(COMMA<Tuple>[$testlist_gexp.start, actions.castExprs($t), $expr::ctype]) -> test ) | (gen_for[gens] @@ -1665,11 +1749,11 @@ | STAR s=test[expr_contextType.Load] (COMMA DOUBLESTAR k=test[expr_contextType.Load])? { $starargs=actions.castExpr($s.tree); - $kwargs=actions.castExpr($k.tree); + $kwargs=actions.castExpr($k.tree); } | DOUBLESTAR k=test[expr_contextType.Load] { - $kwargs=actions.castExpr($k.tree); + $kwargs=actions.castExpr($k.tree); } ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |