arro.plcc 980 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. skip WHITESPACE '\s+'
  2. token NUM '[0-9]+'
  3. token VAR '[A-Za-z_][A-Za-z0-9_]*'
  4. token OP '\+|-'
  5. token MOP '\*|/'
  6. token IN '==>'
  7. token OUT '<=='
  8. token ASSIGN '->'
  9. token LOOP '\?\?'
  10. token IF '\?'
  11. token ELSE '\|'
  12. token LPAREN '\('
  13. token RPAREN '\)'
  14. token LBRACE '\{'
  15. token RBRACE '\}'
  16. token SEMI ';'
  17. token OP '\+|-'
  18. token MOP '\*|/'
  19. %
  20. <program> ::= <stmtlist>
  21. <stmtlist> **= <stmt>
  22. <stmt>InputStmt ::= <IN> <VAR> <SEMI>
  23. <stmt>OutputStmt ::= <OUT> <exp> <SEMI>
  24. <stmt>AssignStmt ::= <VAR> <ASSIGN> <exp> <SEMI>
  25. <stmt>ControlStmt ::= <LPAREN> <exp> <RPAREN> <ctrltail>
  26. <ctrltail>IfStmt ::= <IF> <block> <ELSE> <block>
  27. <ctrltail>LoopStmt ::= <LOOP> <block>
  28. <block> ::= <LBRACE> <stmtlist> <RBRACE>
  29. <exp> ::= <mult> <exprest>
  30. <exprest> **= <OP> <mult>
  31. <mult> ::= <value> <multrest>
  32. <multrest> **= <MOP> <value>
  33. <value> ::= <NUM> | <VAR>
  34. %