Menu

Diff of /trunk/python/python.lime [r26] .. [r27]  Maximize  Restore

Switch to side-by-side view

--- a/trunk/python/python.lime
+++ b/trunk/python/python.lime
@@ -1,71 +1,207 @@
 %class python
-%start stmt
+%start stmt_start
 
 %left '+' '-'
 %left '*' '/' 
 
-stmt = simple_stmt 
-	 | compound_stmt
-	 .
-
-simple_stmt = small_stmt NEWLINE simple_stmt 
-			| small_stmt NEWLINE
-			| small_stmt
-			.
-
-small_stmt = print_stmt 
-		   | assign_stmt 
-		   | cmd_stmt
-		   .
-
-compound_stmt = for_stmt .
-
-cmd_stmt = LNAME DSTRING { python_command($1,$2); } .
-
-print_stmt	= PRINT atom SEMICOLON	{ python_print($2); } 
-			| PRINT atom			{ python_print($2); } .
-
-assign_stmt = varlist EQUAL exprlist { python_assign($1,$3); } .
-
-varlist = LNAME .
-
-exprlist = atom .
-
-for_stmt = FOR exprlist IN testlist COLON { python_for(); } suite { python_end_for(); } .
-
-suite = simple_stmt 
-	  | NEWLINE INDENT stmt DEDENT
-	  .
-
-testlist = test .
-
-test = expr .
-
-expr = LNAME RBO argslist RBC 
-	 | atom
-	 .
-
-argslist = NUMBER COMMA NUMBER .
-
-testlist_comp = testlist_comp_for
-			  | test test_tail { $$ = array("ciao"); echo "ad"; }
-			  | test 
-			  |
-			  .
-
-test_tail = COMMA test test_tail
-		  | COMMA test {echo "as";}
-		  |
-		  .
-
-atom = RBO argslist RBC 
-	 | SBO testlist_comp SBC { $$ = python_list($2); }
-	 | BO  dictorsetmaker  BC
-	 | LNAME 
-	 | NUMBER 
-	 | DSTRING 
-	 | TRIPLEDOT 
-	 | NONE 
-	 | TRUE 
-	 | FALSE 
- 	 .
+stmt_start
+	= newlines stmt stmt_start	
+	| stmt
+	.
+
+newlines
+	= NEWLINE newlines
+	| NEWLINE
+	|
+	.
+
+stmt 
+	= simple_stmt 
+	| compound_stmt
+	.
+
+simple_stmt 
+	= small_stmt NEWLINE simple_stmt 
+	| small_stmt NEWLINE
+	| small_stmt
+	.
+
+small_stmt 
+	= expr_stmt
+	| print_stmt 
+	.
+
+expr_stmt
+	= testlist augassign yield_expr
+	| testlist augassign testlist
+	| testlist EQUAL yield_expr
+	| testlist EQUAL testlist
+	.					
+									
+augassign
+	= PLUSEQUAL 
+	| MINUSEQUAL 
+	| STAREQUAL 
+	| SLASHEQUAL 
+	| MODEQUAL 
+	| AMPEQUAL 
+	| PIPEEQUAL 
+	| ACUEQUAL 
+	| LSHIFTEQUAL            
+	| RSHIFTEQUAL 
+	| DSTAREQUAL 
+	| DSLASHEQUAL
+	.
+
+compound_stmt 
+	= while_stmt
+	| for_stmt 
+	.
+
+while_stmt 
+	= WHILE test COLON suite
+	| WHILE test COLON suite ELSE COLON suite
+	.
+
+print_stmt	
+	= PRINT atom SEMICOLON	{ python_print($2); } 
+	| PRINT atom			{ python_print($2); } 
+	.
+
+for_stmt 
+	= FOR exprlist IN testlist COLON { python_for(); } suite { python_end_for(); } 
+	.
+
+suite 
+	= simple_stmt 
+	| NEWLINE INDENT stmt DEDENT
+	.
+
+testlist 
+	= test 
+	.
+
+test
+	= or_test IF or_test ELSE test
+	| or_test 
+	| lambdef
+	.
+
+or_test
+	= and_test OR and_test
+	| and_test
+	.
+
+and_test
+	= not_test AND not_test
+	| not_test
+	.
+
+not_test
+	= NOT not_test 
+	| comparison
+	.
+
+comparison
+	= expr comp_op expr
+	| expr
+	.
+
+comp_op
+	= LESS 
+	| GREAT
+	| DEQUAL 
+	| GREATEQUAL 
+	| LESSEQUAL
+	| DIFF
+	| NOTEQUAL
+	| IN
+	| NOT IN
+	| IS
+	| IS NOT
+	.
+
+expr
+	= xor_expr PIPE xor_expr
+	| xor_expr
+	.
+
+xor_expr
+	= and_expr ACUE and_expr
+	| and_expr
+	.
+
+and_expr
+	= shift_expr AMPE shift_expr
+	| shift_expr
+	.
+
+shift_expr
+	= arith_expr LSHIFT arith_expr
+	| arith_expr RSHIFT arith_expr
+	| arith_expr
+	.
+
+arith_expr
+	= term PLUS term
+	| term MINUS term
+	| term
+	.
+
+term 
+	= factor STAR factor
+	| factor SLASH factor
+	| factor MOD factor
+	| factor DSLASH factor
+	| factor
+	.
+
+factor
+	= PLUS factor
+	| MINUS factor
+	| TILDE factor
+	| power
+	.
+
+power
+	= atom trailer DSTAR factor
+	| atom DSTAR factor
+	| atom
+	.
+
+trailer
+	= RBO arglist RBC 
+	| SBO subscriptlist SBC 
+	| DOT NAME
+	.
+
+argslist 
+	= NUMBER COMMA NUMBER 
+	.
+
+testlist_comp 
+	= testlist_comp_for
+	| test test_tail { $$ = array("ciao"); echo "ad"; }
+	| test 
+	|
+	.
+
+test_tail 
+	= COMMA test test_tail
+	| COMMA test {echo "as";}
+	|
+	.
+
+atom 
+	= RBO argslist RBC 
+	| SBO testlist_comp SBC { $$ = python_list($2); }
+	| BO  dictorsetmaker  BC
+	| NAME 
+	| NUMBER 
+	| DSTRING 
+	| TRIPLEDOT 
+	| NONE 
+	| TRUE 
+	| FALSE 
+	.
+