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" | "==" | "!=" | ">=" | "<=" );