ivprog.g4 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. lexer grammar ivprog;
  2. PR_PROGRAMA
  3. : 'programa'
  4. ;
  5. PR_REAL
  6. : 'real'
  7. ;
  8. PR_VAZIO
  9. : 'vazio'
  10. ;
  11. PR_LOGICO
  12. : 'logico'
  13. ;
  14. PR_CADEIA
  15. : 'cadeia'
  16. ;
  17. PR_INTEIRO
  18. : 'inteiro'
  19. ;
  20. PR_CARACTER
  21. : 'caractere'
  22. ;
  23. PR_ESCOLHA
  24. : 'escolha'
  25. ;
  26. PR_CASO
  27. : 'caso'
  28. ;
  29. PR_CONTRARIO
  30. : 'contrario'
  31. ;
  32. PR_CONST
  33. : 'const'
  34. ;
  35. PR_FUNCAO
  36. : 'funcao'
  37. ;
  38. PR_RETORNE
  39. : 'retorne'
  40. ;
  41. PR_PARA
  42. : 'para'
  43. ;
  44. PR_PARE
  45. : 'pare'
  46. ;
  47. PR_FACA
  48. : 'faca'
  49. ;
  50. PR_ENQUANTO
  51. : 'enquanto'
  52. ;
  53. PR_SE
  54. : 'se'
  55. ;
  56. PR_SENAO
  57. : 'senao'
  58. ;
  59. fragment PR_FALSO
  60. : 'falso'
  61. ;
  62. fragment PR_VERDADEIRO
  63. : 'verdadeiro'
  64. ;
  65. fragment PR_NAO_LOGICO
  66. : 'nao'
  67. ;
  68. fragment PR_E_LOGICO
  69. : 'E'
  70. ;
  71. fragment PR_OU_LOGICO
  72. : 'OU'
  73. ;
  74. // GAMBIARRA : '.' |'á'| 'à'| 'ã'|'â'|'é'|'ê'|'í'|'ó'|'ô'|'õ'|'ú'|'ü'|'ç'|'Ä'|'À'|'Ã'|'Â'|'É'|'Ê'|'Ë'|'Ó'|'Ô'|'Õ'|'Ú'|'Ü'|'Ç'|'#'|'$'|'"'|'§'|'?'|'¹'|'²'|'³'|'£'|'¢'|'¬'|'ª'|'º'|'~'|'\''|'`'|'\\'|'@';
  75. ABRE_PAR
  76. : '('
  77. ;
  78. FECHA_PAR
  79. : ')'
  80. ;
  81. ABRE_COL
  82. : '['
  83. ;
  84. FECHA_COL
  85. : ']'
  86. ;
  87. ABRE_CHA
  88. : '{'
  89. ;
  90. FECHA_CHA
  91. : '}'
  92. ;
  93. VIRGULA
  94. : ','
  95. ;
  96. ATRIBUICAO
  97. : '='
  98. ;
  99. OPERADOR_SOMA
  100. : ('+'|'-')
  101. ;
  102. OPERADOR_MULTIPLICATIVO
  103. : ('*'|'/'|'%')
  104. ;
  105. OPERADOR_E
  106. : PR_E_LOGICO
  107. ;
  108. OPERADOR_OU
  109. : PR_OU_LOGICO
  110. ;
  111. OPERADOR_RELACIONAL
  112. : ('>='|'=='|'<='|'>'|'<')
  113. ;
  114. DPONTOS
  115. : ':'
  116. ;
  117. OPERADOR_NAO
  118. : PR_NAO_LOGICO
  119. ;
  120. LOGICO
  121. : PR_VERDADEIRO
  122. | PR_FALSO
  123. ;
  124. ID
  125. : [a-zA-Z_] [a-zA-Z0-9_]*
  126. ;
  127. // ID_BIBLIOTECA : ID '.' ID;
  128. INTEIRO
  129. : [0-9]+
  130. | ('0x'|'0X')(DIGIT_HEX)+
  131. | ('0b'|'0B')[0-1]+
  132. ;
  133. REAL
  134. : [0-9]+ '.' [0-9]+
  135. ;
  136. CADEIA
  137. : '"' CADEIA_CARACTER* '"'
  138. ;
  139. fragment CADEIA_CARACTER //String como definido em https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4
  140. : ~["\\\r\n]
  141. | SEQ_ESC
  142. ;
  143. CARACTER //Caracter como definido em https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4
  144. : '\'' ( SEQ_ESC | ~['\\\r\n]) '\''
  145. ;
  146. ESPACO
  147. : ( ' ' | '\t') -> skip
  148. ;
  149. fragment PONTO_VIRGULA
  150. : ';'
  151. ;
  152. EOS
  153. : [\r\n]+
  154. | PONTO_VIRGULA
  155. ;
  156. fragment DIGIT_HEX
  157. : [0-9a-fA-F]
  158. ;
  159. fragment DIGIT_OCTAL
  160. : [0-7]
  161. ;
  162. fragment SEQ_ESC
  163. : '\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')
  164. | ESC_UNICODE
  165. | ESC_OCTAL
  166. ;
  167. fragment ESC_OCTAL
  168. : '\\' [0-3] DIGIT_OCTAL DIGIT_OCTAL
  169. | '\\' DIGIT_OCTAL DIGIT_OCTAL
  170. | '\\' DIGIT_OCTAL
  171. ;
  172. fragment ESC_UNICODE
  173. : '\\' 'u' DIGIT_HEX DIGIT_HEX DIGIT_HEX DIGIT_HEX
  174. ;
  175. COMENTARIO
  176. : ('//' ~('\n'|'\r')* '\r'? '\n'
  177. | '/*' .*? '*/') -> channel(HIDDEN)
  178. ;