Skip to content

Latest commit

 

History

History
70 lines (40 loc) · 2.16 KB

File metadata and controls

70 lines (40 loc) · 2.16 KB

Tiny Languages Context Free Grammar EBNF

  1. Program -> { Function } MainFunction

  2. MainFunction -> Datatype main() FunctionBody

  3. Function -> FunctionDeclaration FunctionBody

  4. FunctionDeclaration -> Datatype Identifier ( Parameters? )

  5. FunctionBody -> { Statements ReturnStatement }

  6. Parameter -> Datatype Identifier

  7. Parameters -> Parameter { , Parameter }

  8. FunctionCall -> Identifier ( Arguments? )

  9. Argument -> Expression

  10. Arguments -> Argument { , Argument }

  11. Statements -> { Statement }

  12. Statement -> DeclarationStatement ; | AssignmentStatement ; | WriteStatement ; | ReadStatement ; | IfStatement | RepeatStatement

  13. RepeatStatement -> repeat Statements until LogicalOr

  14. IfStatement -> if LogicalOr then Statements [ ElseIfStatement | ElseStatement ] end

  15. ElseIfStatement -> elseif LogicalOr then Statements [ ElseIfStatement | ElseStatement ]

  16. ElseStatement -> else Statements

  17. WriteStatement -> write ( Expression | endl )

  18. ReadStatement -> read Identifier

  19. AssignmentStatement -> Identifier := Expression

  20. Condition -> Identifier ( > | < | = | <> ) Expression

  21. LogicalOr -> LogicalAnd ( || LogicalOr )?

  22. LogicalAnd -> Cond ( && Cond )?

  23. DeclarationStatement -> Datatype Declarations

  24. Declaration -> AssignmentStatement | Identifier

  25. Declarations -> Declaration { Declaration , }

  26. ReturnStatement -> return Expression ;

  27. Datatype -> int | float | string

  28. Expression -> Term ( ( - | + ) Expression )?

  29. Term -> Factor ( ( * | / ) Term )?

  30. Factor -> FunctionCall | Number | String | Identifier | ( Expressions )