phpython Code
a python interpreter written in php
Status: Pre-Alpha
Brought to you by:
francescobianco
--- 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 + . +