github.com/tiagovtristao/plz@v13.4.0+incompatible/docs/grammar.txt (about) 1 # Start symbol for the grammar, representing the top-level structure of a file. 2 file_input = { statement }; 3 4 # Any single statement. Must occur on its own line. 5 statement = ( "pass" | "continue" | func_def | for | if | return | 6 raise | assert | ident_statement | literal ) EOL; 7 return = "return" [ expression { "," expression } ]; 8 raise = "raise" expression; 9 assert = "assert" expression [ "," String ]; 10 for = "for" Ident { "," Ident } "in" expression ":" EOL { statement }; 11 if = "if" expression ":" EOL { statement } 12 [ "elif" expression ":" EOL { statement } ] 13 [ "else" ":" EOL { statement } ]; 14 func_def = "def" Ident "(" [ argument { "," argument } ] ")" ":" EOL 15 [ String EOL ] 16 { statement }; 17 argument = Ident [ ":" String { "|" String } ] { "&" Ident } [ "=" expression ]; 18 ident_statement = Ident 19 ( { "," Ident } "=" expression 20 | ( "[" expression "]" ( "=" | "+=" ) expression) 21 | ( "." ident | call | "=" expression | "+=" expression ) ); 22 23 # Any generalised expression, with all the trimmings. 24 expression = [ "-" | "not" ] value [ operator expression ] 25 [ "if" expression "else" expression ]; 26 value = ( String | Int | "True" | "False" | "None" | list | dict | tuple | lambda | ident ) 27 [ slice ] [ ( "." ident | call ) ]; 28 ident = Ident { "." ident | call }; 29 call = "(" [ arg { "," arg } ] ")"; 30 arg = expression | ident "=" expression; 31 list = "[" expression { "," expression } comprehension "]"; 32 tuple = "(" expression { "," expression } ")"; 33 dict = "[" expression ":" expression { "," expression ":" expression } comprehension "]"; 34 comprehension = "for" Ident { "," Ident } "in" expression 35 [ "for" Ident { "," Ident } "in" expression ] 36 [ "if" expression ]; 37 slice = "[" [ expression ] [ ":" expression ] "]"; 38 lambda = "lambda" [ lambda_arg { "," lambda_arg } ] ":" expression; 39 lambda_arg = Ident [ "=" expression ]; 40 operator = ("+" | "-" | "%" | "<" | ">" | "and" | "or" | "is" | 41 "in" | "not" "in" | "==" | "!=" | ">=" | "<=" );