BNF for python.jj

NON-TERMINALS

single_input ::= ( <NEWLINE> )* ( ( simple_stmt | compound_stmt <NEWLINE> ) )? ( <NEWLINE> )* <EOF>
file_input ::= ( <NEWLINE> | stmt )* <EOF>
eval_input ::= ( <NEWLINE> )* SmartTestList ( <NEWLINE> )* <EOF>
funcdef ::= decorators <DEF> AnyName parameters <COLON> suite
decorators ::= ( begin_decorator ( <LPAREN> insidetuporcall <RPAREN> )* <NEWLINE> )*
begin_decorator ::= <AT> dotted_name
parameters ::= <LPAREN> ( varargslist )? <RPAREN>
varargslist ::= defaultarg ( <COMMA> defaultarg )* ( <COMMA> ExtraArgList )? ( <COMMA> ExtraKeywordList )? ( <COMMA> )?
| ( ExtraArgList ( <COMMA> ExtraKeywordList )? | ExtraKeywordList )
ExtraArgList ::= <MULTIPLY> Name
ExtraKeywordList ::= ( <POWER> | <MULTIPLY> <MULTIPLY> ) Name
defaultarg ::= fpdef ( <EQUAL> test )?
fpdef ::= Name
| <LPAREN> fplist <RPAREN>
fplist ::= fpdef ( <COMMA> fpdef )* ( <COMMA> )?
stmt ::= simple_stmt
| compound_stmt
simple_stmt ::= small_stmt ( <SEMICOLON> small_stmt )* ( <SEMICOLON> )? <NEWLINE>
small_stmt ::= expr_stmt
| print_stmt
| del_stmt
| pass_stmt
| flow_stmt
| import_stmt
| global_stmt
| exec_stmt
| assert_stmt
expr_stmt ::= SmartTestList ( <PLUSEQ> SmartTestList | <MINUSEQ> SmartTestList | <MULTIPLYEQ> SmartTestList | <DIVIDEEQ> SmartTestList | <FLOORDIVIDEEQ> SmartTestList | <MODULOEQ> SmartTestList | <ANDEQ> SmartTestList | <OREQ> SmartTestList | <XOREQ> SmartTestList | <LSHIFTEQ> SmartTestList | <RSHIFTEQ> SmartTestList | <POWEREQ> SmartTestList | ( <EQUAL> SmartTestList )* )
print_stmt ::= <PRINT> <RSHIFT> ( test ( ( <COMMA> test )+ ( Comma )? )? )
| <PRINT> ( test ( <COMMA> test )* ( Comma )? )
| <PRINT>
del_stmt ::= begin_del_stmt exprlist
begin_del_stmt ::= <DEL>
pass_stmt ::= <PASS>
flow_stmt ::= <BREAK>
| <CONTINUE>
| return_stmt
| yield_stmt
| raise_stmt
return_stmt ::= begin_return_stmt ( SmartTestList )?
begin_return_stmt ::= <RETURN>
yield_stmt ::= <YIELD> SmartTestList
raise_stmt ::= <RAISE> ( test ( <COMMA> test ( <COMMA> test )? )? )?
import_stmt ::= <IMPORT> Import
| <FROM> ImportFrom
Import ::= dotted_as_name ( <COMMA> dotted_as_name )*
ImportFrom ::= dotted_name <IMPORT> ( <MULTIPLY> | ( import_as_name ( <COMMA> import_as_name )* ) | <LPAREN> import_as_name ( ( <COMMA> ( import_as_name )? )* <RPAREN> ) )
dotted_as_name ::= dotted_name ( <AS> Name )?
dotted_name ::= AnyName ( <DOT> AnyName )*
import_as_name ::= AnyName ( <AS> Name )?
global_stmt ::= <GLOBAL> Name ( <COMMA> Name )*
exec_stmt ::= <EXEC> expr ( <IN> test ( <COMMA> test )? )?
assert_stmt ::= <ASSERT> test ( <COMMA> test )?
compound_stmt ::= if_stmt
| while_stmt
| for_stmt
| try_stmt
| funcdef
| classdef
if_stmt ::= begin_if_stmt test <COLON> suite ( begin_elif_stmt test <COLON> suite )* ( <ELSE> <COLON> suite )?
begin_if_stmt ::= <IF>
begin_elif_stmt ::= <ELIF>
while_stmt ::= begin_while_stmt test <COLON> suite ( begin_else_stmt suite )?
begin_while_stmt ::= <WHILE>
begin_else_stmt ::= <ELSE> <COLON>
for_stmt ::= begin_for_stmt exprlist <IN> SmartTestList <COLON> suite ( begin_for_else_stmt suite )?
begin_for_stmt ::= <FOR>
begin_for_else_stmt ::= <ELSE> <COLON>
try_stmt ::= begin_try_stmt suite ( ( ( except_clause )+ ( begin_try_else_stmt suite )? ) | begin_finally_stmt suite )
begin_try_stmt ::= <TRY> <COLON>
begin_try_else_stmt ::= <ELSE> <COLON>
begin_finally_stmt ::= <FINALLY> <COLON>
except_clause ::= begin_except_clause ( test ( <COMMA> test )? )? <COLON> suite
begin_except_clause ::= <EXCEPT>
suite ::= ( simple_stmt | <NEWLINE> <INDENT> ( stmt )+ <DEDENT> )
test ::= ( lambdef | and_test ( <OR_BOOL> and_test )* )
and_test ::= not_test ( <AND_BOOL> not_test )*
not_test ::= <NOT_BOOL> not_test
| comparison
comparison ::= ( expr ( comp_op expr )* )
comp_op ::= <LESS>
| <GREATER>
| <EQEQUAL>
| <EQGREATER>
| <EQLESS>
| <LESSGREATER>
| <NOTEQUAL>
| <IN>
| <NOT_BOOL> <IN>
| <IS> <NOT_BOOL>
| <IS>
expr ::= xor_expr ( <OR> xor_expr )*
xor_expr ::= and_expr ( <XOR> and_expr )*
and_expr ::= shift_expr ( <AND> shift_expr )*
shift_expr ::= arith_expr ( <LSHIFT> arith_expr | <RSHIFT> arith_expr )*
arith_expr ::= term ( <PLUS> term | <MINUS> term )*
term ::= factor ( <MULTIPLY> factor | <DIVIDE> factor | <FLOORDIVIDE> factor | <MODULO> factor )*
factor ::= <PLUS> factor
| <MINUS> factor
| <NOT> factor
| power
power ::= atomtrailer ( <POWER> factor )*
atomtrailer ::= atom ( ( <LPAREN> <RPAREN> ) | ( <LPAREN> insidetuporcall <RPAREN> ) | <LBRACKET> subscriptlist <RBRACKET> | <DOT> AnyName )*
atom ::= ( <LPAREN> <RPAREN> )
| ( <LPAREN> insidetuporcall <RPAREN> )
| ( <LPAREN> ( SmartTestList )? <RPAREN> )
| ( <LBRACKET> ( listmaker )? <RBRACKET> )
| ( <LBRACE> ( dictmaker )? <RBRACE> )
| "`" SmartTestList "`"
| Name
| Number
| String ( String )*
insidetuporcall ::= arglist ( list_for )*
lambdef ::= <LAMBDA> ( varargslist )? <COLON> test
subscriptlist ::= ( subscript ( <COMMA> subscript )* ( Comma )? )
subscript ::= <DOT> <DOT> <DOT>
| ( test ( slice )? )
| slice
slice ::= Colon ( test )? ( Colon ( test )? )?
Colon ::= <COLON>
Comma ::= <COMMA>
exprlist ::= ( expr ( <COMMA> expr )* ( Comma )? )
SmartTestList ::= ( test ( <COMMA> test )* ( Comma )? )
testlist ::= test ( <COMMA> test )* ( <COMMA> )?
dictmaker ::= test <COLON> test ( <COMMA> test <COLON> test )* ( <COMMA> )?
listmaker ::= test ( ( list_for )+ | ( <COMMA> test )* ( Comma )? )
complistmaker ::= test list_for
list_for ::= <FOR> exprlist <IN> SmartTestList ( <IF> test )*
classdef ::= <CLASS> Name ( <LPAREN> testlist <RPAREN> )? <COLON> suite
arglist ::= normalargs ( <COMMA> ( ExtraArgValueList ( <COMMA> ExtraKeywordValueList )? | ExtraKeywordValueList )? )?
| ( ExtraArgValueList ( <COMMA> ExtraKeywordValueList )? | ExtraKeywordValueList )?
normalargs ::= argument ( <COMMA> argument )*
ExtraArgValueList ::= <MULTIPLY> test
ExtraKeywordValueList ::= ( <POWER> | <MULTIPLY> <MULTIPLY> ) test
argument ::= ( ( AnyName <EQUAL> )? test )
Number ::= ( ( <HEXNUMBER> ) | ( <OCTNUMBER> ) | ( <DECNUMBER> ) | ( <FLOAT> ) | ( <COMPLEX> ) )
Complex ::= <FLOAT>
Name ::= ( <NAME> | <AS> )
String ::= ( <SINGLE_STRING> )
| ( <SINGLE_STRING2> )
| ( <TRIPLE_STRING> )
| ( <TRIPLE_STRING2> )
| ( <SINGLE_USTRING> )
| ( <SINGLE_USTRING2> )
| ( <TRIPLE_USTRING> )
| ( <TRIPLE_USTRING2> )
AnyName ::= ( <NAME> )
| ( <OR_BOOL> )
| ( <AND_BOOL> )
| ( <NOT_BOOL> )
| ( <IS> )
| ( <IN> )
| ( <LAMBDA> )
| ( <IF> )
| ( <ELSE> )
| ( <ELIF> )
| ( <WHILE> )
| ( <FOR> )
| ( <TRY> )
| ( <EXCEPT> )
| ( <DEF> )
| ( <CLASS> )
| ( <FINALLY> )
| ( <PRINT> )
| ( <PASS> )
| ( <BREAK> )
| ( <CONTINUE> )
| ( <RETURN> )
| ( <YIELD> )
| ( <IMPORT> )
| ( <FROM> )
| ( <DEL> )
| ( <RAISE> )
| ( <GLOBAL> )
| ( <EXEC> )
| ( <ASSERT> )
| ( <AS> )