Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. grammar grammaire;
  2.  
  3. options {
  4. language = C;
  5. output = AST;
  6. }
  7.  
  8. tokens {
  9. PLUS = '+' ;
  10. MOINS = '-' ;
  11. FOIS = '*' ;
  12. DIVI = '/' ;
  13. PUISS = '^' ;
  14.  
  15. GPAREN = '(' ;
  16. DPAREN = ')';
  17.  
  18. OPEN_BLCK = '{';
  19. CLOS_BLCK = '}';
  20.  
  21. SUP = '>' ;
  22. INF = '<' ;
  23. SUPEQ = '>=' ;
  24. INFEQ = '<=' ;
  25. AFFECT = '=' ;
  26. EGAL = '==' ;
  27. NEGAL = '/=' ;
  28. DEF = '::';
  29. // div - mod - null - ... ?
  30.  
  31. ARGSEPAR = ',' ;
  32.  
  33. TO = '->';
  34.  
  35. SYNOTYPE = 'type';
  36.  
  37. PRINT = 'print';
  38. ERROR = 'error';
  39.  
  40. LET = 'let';
  41. IN = 'in';
  42.  
  43. IF = 'if';
  44. THEN = 'then';
  45. ELSE = 'else';
  46. OTHERWISE = 'otherwise';
  47. TELQUE = '|';
  48.  
  49. MAIN = 'main';
  50. ENDINSTRUCT = ';' ;
  51. }
  52.  
  53. INT : '0'..'9'+ ;
  54. STRING : '"' ( ~('"') )* '"';
  55. BOOL : ('True'|'False');
  56. TYPE : ('A'..'Z')('a'..'z'|'A'..'Z')* ; //'Int' | 'Char' | 'String' | 'Bool' |
  57. IDENTIFIER : (('a'..'z') ('_'?('a'..'z'|'A'..'Z'|'0'..'9'))*)|'_' ;
  58.  
  59. COMMENTAIRE : '--' .* '\n' {$channel=HIDDEN;} ;
  60. WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;} ;
  61.  
  62. code_source
  63. : main (definition_fct|synonyme)*
  64. ;
  65.  
  66. // Point d'entrée du programme. Doit être analysé en dernier
  67. main
  68. : 'main' '=' (expression|ifthen) ';'
  69. ;
  70.  
  71. definition_fct
  72. : IDENTIFIER (('::' TYPE ('->' TYPE)+ ';') | (((INT+)|(IDENTIFIER+))? ('|' (condition|'otherwise') )? '=' (expression|ifthen) ';'))
  73. ;
  74.  
  75. letin
  76. : 'let' '{' (IDENTIFIER '=' expression ';')+ '}' 'in' expression
  77. ;
  78.  
  79. ifthen
  80. : 'if' condition 'then' (expression|ifthen) ('else' (expression|ifthen))?
  81. ;
  82.  
  83. expression
  84. : 'print' expression
  85. | 'error' STRING
  86. | STRING
  87. | letin
  88. | niveau_signe
  89. ;
  90.  
  91. niveau_signe
  92. : ('-')? niveau_somme
  93. ;
  94.  
  95. niveau_somme
  96. : niveau_fois (('+'|'-') niveau_fois)?
  97. ;
  98.  
  99. // % ou mod ?
  100. niveau_fois
  101. : valeur_atomique (('*'|'/'|'%') valeur_atomique)?
  102. ;
  103.  
  104. valeur_atomique
  105. : INT
  106. | '(' niveau_signe ')'
  107. | appel_fct
  108. ;
  109.  
  110. appel_fct
  111. : IDENTIFIER ('('(niveau_signe(','niveau_signe)*)')')?
  112. | INT 'mod' INT
  113. | 'div' '(' niveau_signe ',' niveau_signe ')'
  114. ;
  115.  
  116. synonyme
  117. : 'type' TYPE '=' TYPE ';'
  118. ;
  119.  
  120. condition
  121. : expression ('>'|'<'|'>='|'<='|'=='|'/=') expression
  122. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement