Advertisement
SimoDR

HugeC_by(Simo&&Tony)

May 10th, 2020
2,743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CFDG 1.70 KB | None | 0 0
  1. grammar tinyc;
  2.  
  3. start       : program EOF ;
  4. program     : statement | statement program ;
  5.          
  6. statement   : decl ';' | assign ';' | branch | loop | out ';' |in ';' ;
  7.  
  8. decl        : 'int' ID ;
  9. assign      :  ID '=' numExpr ;
  10. in          : 'read' '(' ')' ;
  11. out         : 'write' '(' numExpr ')' | 'write' '(' STRING ')';
  12. branch      : 'if' '(' booleanExpr')' '{' program '}' | 'if' '(' booleanExpr ')' '{' program '}' 'else' '{' program '}' ;
  13.  
  14. loop        : 'while' '(' booleanExpr ')' '{' program '}' ;
  15.  
  16.  
  17. booleanExpr    : booleanExpr OR booleanExpr1 | booleanExpr1 ;
  18. booleanExpr1   : booleanExpr1 AND booleanExpr2 | booleanExpr2 ;
  19. booleanExpr2   : '(' booleanExpr ')' | relation | NOT relation | NOT booleanExpr ;
  20.  
  21.  
  22. relation       : numExpr EQ numExpr
  23.         | numExpr NEQ numExpr
  24.         | numExpr LEQ numExpr
  25.         | numExpr GEQ numExpr
  26.         | numExpr LT numExpr
  27.         | numExpr GT numExpr ;
  28.  
  29.  
  30. numExpr     : numExpr ADD numExpr1 | numExpr SUB numExpr1 | numExpr1 ;
  31. numExpr1    : numExpr1 MULT numExpr2 | numExpr1 DIV numExpr2 | numExpr1 MOD numExpr2 | numExpr2 ;
  32. numExpr2    : '(' numExpr ')' | NUMBER | ID | in ;
  33.  
  34.  
  35. ADD         : '+' ;
  36. SUB         : '-' ;
  37. DIV         : '/' ;
  38. MOD         : '%' ;
  39. MULT        : '*' ;
  40. AND         : '&&' ;
  41. OR          : '||' ;
  42. NOT         : '!'  ;
  43. EQ          : '==' ;
  44. LT          : '<' ;
  45. LEQ         : '<=' ;
  46. GT          : '>' ;
  47. GEQ         : '>=' ;
  48. NEQ         : '!=' ;
  49. ID          : [a-z]+ ;
  50. NUMBER      : [0-9]+ ;
  51. STRING      : '"' .*? '"';
  52. COMMENT     : '/*' .*? '*/' -> skip ;     // .*? matches anything until the first */
  53. LINE_COMMENT : '//' ~[\r\n]* -> skip ;  // ~[\r\n]* matches anything but \r and \n
  54. WS          : [ \n\t\r]+ -> skip;
  55. ErrorChar   : . ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement