Grammar for mini-Python:

  1. Program := Statement | Statement Program
  2. Statement := DefStatement | IfStatement | ReturnStatement | PrintStatement | WhileStatement | AssignStatment | FunctionCall
  3. DefStatement := def identifier ( ArgList ) : Sequence
  4. ArgList := identifier Arglist | ε
  5. MoreArgs := , identifier MoreArgs | ε
  6. IfStatement := if Expression : Sequence else : Sequence
  7. WhileStatement := while Expression : Sequence
  8. ReturnStatement := return Expression NEWLINE
  9. PrintStatement := print Expression NEWLINE
  10. AssignStatement := identifier = Expression NEWLINE
  11. Sequence := NEWLINE INDENT MoreStatements DEDENT
  12. MoreStatements := Statement MoreStatements | Statement
  13. Expression := AdditionExpression Comparison
  14. Comparison := (<|>|<=|>=|==) AdditionExpression Comparison | ε
  15. AdditionExpression := MultiplicationExpression AdditionFactor
  16. AdditionFactor := (+|-) MultiplicationExpression AdditionFactor | ε
  17. MultiplicationExpression := ElementExpression MultiplicationFactor
  18. MultiplicationFactor := (*|/) ElementExpression MultiplicationFactor | ε
  19. ElementExpression := PrimitiveExpression ElementAccess
  20. ElementAccess := [ Expression ] ElementAcess | ε
  21. FunctionCallExpression := PrimitiveExpression ( ExpressionList )
  22. ExpressionList := Expression MoreExpressions | ε
  23. MoreExpressions := , Expression MoreExpressions | ε
  24. PrimitiveExpression := Integer | NAME | ( Expression ) | ListExpression | BAR Expression BAR
  25. FunctionCallStatement := PrimitiveExpression ( ExpressionList ) NEWLINE