Advertisement
Guest User

Untitled

a guest
Sep 8th, 2022
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.04 KB | None | 0 0
  1. PARSER_BEGIN(Karloff)
  2.  
  3. import java.io.*;
  4.  
  5. public class Karloff {
  6.  
  7.     public static void main(String args[]) throws ParseException, IOException {
  8.         // javacc -NOSTATIC Karloff.jj
  9.         Karloff parser = new Karloff(new FileReader(args[0]));
  10.         parser.KarloffLexicon();
  11.         parser = new Karloff(new FileReader(args[0]));
  12.         parser.Karloff();
  13.     }
  14.  
  15. }
  16.  
  17. PARSER_END(Karloff)
  18.  
  19. SKIP:{
  20.   " "
  21. | "\t"
  22. | "\n"
  23. | "\r"}
  24.  
  25. TOKEN:{
  26.   <MAIN:"main">
  27. | <ACHAVES:"{">
  28. | <FCHAVES:"}">
  29. | <APAREN:"(">
  30. | <FPAREN:")">
  31. | <SEMIC:";">
  32. | <COMMA:",">
  33. | <FUNC:"func">
  34. | <TVOID:"void">
  35. | <NEWVAR:"newVar">
  36. | <TINT:"int">
  37. | <TBOOL:"bool">
  38. | <IF:"if">
  39. | <THEN:"then">
  40. | <WHILE:"while">
  41. | <REPEAT:"repeat">
  42. | <UNTIL:"until">
  43. | <RETURN:"return">
  44. | <TRUE:"true">
  45. | <FALSE:"false">
  46. | <OUTPUT:"System.output">
  47. | <INPUT:"System.input">
  48. | <PLUS:"+">
  49. | <MINUS:"-">
  50. | <ASTERISK:"*">
  51. | <SLASH:"/">
  52. | <AMP:"&">
  53. | <VERBAR:"|">
  54. | <LESS:"<">
  55. | <GREATER:">">
  56. | <ASSIGN:"=">
  57. | <EQUAL:"==">
  58.  
  59. }
  60.  
  61. TOKEN:{
  62.   <NUM: (["0"-"9"] | ["1"-"9"] (["0"-"9"])*) ("." (["0"-"9"])* ["1"-"9"])? ("E" (["+","-"])? ["1"-"9"] (["0"-"9"])* )?>
  63. | <ID: ["a"-"z","A"-"Z"] (("_")?["a"-"z","A"-"Z","0"-"9"])* >
  64.  
  65. }
  66.  
  67. void Karloff () :
  68. {Token t;}
  69. {
  70.     Main() ( Func() )? <EOF> {System.out.println("Succesful!");}
  71. }
  72.  
  73. void Main () :
  74. {}
  75. {
  76.     <TVOID> <MAIN> <ACHAVES> Vardecl() Seqcomandos() <FCHAVES>
  77. }
  78.  
  79. void Vardecl () :
  80. {}
  81. {
  82.     (<NEWVAR> Tipo() <ID> <SEMIC>)*
  83.     // ( <NEWVAR> Tipo() <ID> <SEMIC> Vardecl() )?
  84. }
  85.  
  86. void Vardecl1 () :
  87. {}
  88. {
  89.     ( <NEWVAR> Tipo() <ID> <SEMIC> Vardecl1() )?
  90. }
  91.  
  92. void Tipo () :
  93. {}
  94. {
  95.     <TBOOL> | <TINT>
  96. }
  97.  
  98. void Seqcomandos () :
  99. {}
  100. {
  101.     (Comando() <SEMIC>)+
  102.     // ( Comando() <SEMIC> Seqcomandos() )?
  103. }
  104.  
  105. void Seqcomandos1 () :
  106. {}
  107. {
  108.     ( Comando() <SEMIC> Seqcomandos1() )?
  109. }
  110.  
  111. void Comando () :
  112. {}
  113. {
  114.   <ID> (<ASSIGN> Exp() | <APAREN> ( Listaexp() )? <FPAREN>)
  115. | <IF> <APAREN> Exp() <FPAREN> <THEN> <ACHAVES> Seqcomandos() <FCHAVES>
  116. | <WHILE> <APAREN> Exp() <FPAREN> <ACHAVES> Seqcomandos() <FCHAVES>
  117. | <REPEAT> <ACHAVES> Seqcomandos() <FCHAVES> <UNTIL> <APAREN> Exp() <FPAREN>
  118. | <RETURN> Exp()
  119. | <OUTPUT> <APAREN> Exp() <FPAREN>
  120. | <INPUT> <APAREN> Exp() <FPAREN>
  121. }
  122.  
  123. void Exp () :
  124. {}
  125. {
  126.     <APAREN> Exp() Op() Exp() <FPAREN>
  127. |   Fator()
  128. }
  129.  
  130. void Fator () :
  131. {}
  132. {
  133.     <ID> ( <APAREN> ( Listaexp() )? <FPAREN> )?
  134. |   <NUM>
  135. |   <TRUE>
  136. |   <FALSE>
  137. }
  138.  
  139. void Op () :
  140. {}
  141. {
  142.     <PLUS> | <MINUS> | <ASTERISK> | <SLASH> | <AMP>
  143. | <VERBAR> | <LESS> | <GREATER> | <ASSIGN>| <EQUAL>
  144. }
  145.  
  146. void Listaexp () :
  147. {}
  148. {
  149.     Exp() Listaexp1()
  150. }
  151.  
  152. void Listaexp1 () :
  153. {}
  154. {
  155.     ( <COMMA> Exp() Listaexp1() )?
  156. }
  157.  
  158. void Func () :
  159. {}
  160. {
  161.     <FUNC> Tipo() <ID> <APAREN> ( Listaarg() )? <FPAREN> <ACHAVES> Vardecl() Seqcomandos() <FCHAVES> Func1()
  162. }
  163.  
  164. void Func1 () :
  165. {}
  166. {
  167.     ( <FUNC> Tipo() <ID> <APAREN> ( Listaarg() )? <FPAREN> <ACHAVES> Vardecl() Seqcomandos() <FCHAVES> Func1() )?
  168. }
  169.  
  170. void Listaarg () :
  171. {}
  172. {
  173.     Tipo() <ID> Listaarg1()
  174. }
  175.  
  176. void Listaarg1 () :
  177. {}
  178. {
  179.    ( <COMMA> Tipo() <ID> Listaarg1() )?
  180. }
  181.  
  182. void KarloffLexicon () :
  183. {Token t;}
  184. {
  185.  
  186. (
  187.   <MAIN> { System.out.println("Palavra reservada: main");}
  188. | <ACHAVES> { System.out.println("Abre chaves: {");}
  189. | <FCHAVES> { System.out.println("Fecha chaves: }");}
  190. | <APAREN> { System.out.println("Abre parenteses: (");}
  191. | <FPAREN> { System.out.println("Fecha parenteses: )");}
  192. | <SEMIC> { System.out.println("Ponto e virgula: ;");}
  193. | <COMMA> { System.out.println("Virgula: ,");}
  194. | <FUNC> { System.out.println("Palavra reservada: func");}
  195. | <TVOID> { System.out.println("Palavra reservada: void");}
  196. | <NEWVAR> { System.out.println("Palavra reservada: newVar");}
  197. | <TINT> { System.out.println("Palavra reservada: int");}
  198. | <IF> { System.out.println("Palavra reservada: if");}
  199. | <THEN> { System.out.println("Palavra reservada: then");}
  200. | <WHILE> { System.out.println("Palavra reservada: while");}
  201. | <REPEAT> { System.out.println("Palavra reservada: repeat");}
  202. | <UNTIL> { System.out.println("Palavra reservada: until");}
  203. | <RETURN> { System.out.println("Palavra reservada: return");}
  204. | <TRUE> { System.out.println("Palavra reservada: true");}
  205. | <FALSE> { System.out.println("Palavra reservada: false");}
  206. | <OUTPUT> { System.out.println("Palavra reservada: System.output");}
  207. | <INPUT> { System.out.println("Palavra reservada: System.input");}
  208. | <PLUS> { System.out.println("Operador 'mais': +");}
  209. | <MINUS> { System.out.println("Operador 'menos': -");}
  210. | <ASTERISK> { System.out.println("Operador 'asterisco': *");}
  211. | <SLASH> { System.out.println("Operador 'barra': /");}
  212. | <AMP> { System.out.println("Operador 'e comercial': &");}
  213. | <VERBAR> { System.out.println("Operador 'pipe': |");}
  214. | <LESS> { System.out.println("Operador 'menor': <");}
  215. | <GREATER> { System.out.println("Operador 'maior': >");}
  216. | <ASSIGN> { System.out.println("Operador 'atribuicao': =");}
  217. | <EQUAL> { System.out.println("Operador 'igualdade': ==");}
  218. | t=<NUM> { System.out.println("Número: "+ t.image);}
  219. | t=<ID> { System.out.println("Identificador: "+ t.image);}
  220. )*
  221. <EOF>
  222.  
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement