Advertisement
Guest User

Untitled

a guest
May 27th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. /*
  2. * parser.cup -- SPL parser specification
  3. */
  4.  
  5.  
  6. package parse;
  7.  
  8. import java_cup.runtime.*;
  9.  
  10.  
  11. parser code {:
  12. /* Erweiterung der Parser-Klasse */
  13. public void syntax_error(Symbol currToken) {
  14. System.out.println(
  15. "**** Error: syntax error" +
  16. " in line " + currToken.left +
  17. ", column " + currToken.right
  18. );
  19. System.exit(0);
  20. }
  21.  
  22. :}
  23. /* Definition der Terminalsymbole */
  24. terminal ARRAY, ELSE, IF, OF, PROC, REF, TYPE, VAR, WHILE, LCURL, RCURL;
  25. terminal LPAREN, RPAREN, LBRACK, RBRACK;
  26. terminal EQ, NE, LT, LE, GT, GE, ASGN, COLON, COMMA, SEMIC;
  27. terminal PLUS, MINUS, STAR, SLASH;
  28. terminal String IDENT;
  29. terminal Integer INTLIT;
  30.  
  31.  
  32.  
  33. /* Definition der Nonterminalsymbole */
  34. non terminal program;
  35.  
  36. non terminal DecList GlobalDeclarations; //Rückgabetyp DecList
  37. non terminal Dec GlobalDec, TypeDec, paramlist, ProcDec; //Rckgabetyp Dec
  38.  
  39. non terminal VarDec SimpleVar, ArrayVar; //Rückgabetyp VarDec
  40. non terminal param, typedec;
  41. non terminal GlobalDeclaration;
  42. non terminal primaryexp, instruction;
  43. non terminal expression, term, factor;
  44. /*An expression is made of a sum of terms and a term is made of a product of factors and a factor is either a number or a parenthesized subexpression.*/
  45.  
  46. start with program;
  47.  
  48. /*DecList repräsentiert eine Liste von Deklarationen.
  49. Für die Listenelemente gibt es verschiedene Varianten, z.B.Typdeklarationen (TypeDec), Prozedurdeklarationen (ProcDec) oder Variablendeklarationen (VarDec).
  50.  
  51. ProcDec repräsentiert eine Prozedurdeklaration.
  52. Der Baumknoten hat ein Attribut vom Typ Sym, das den Prodedur-bezeichner ”aux“ enthält, und drei komplexe Unterstrukturen, die durch Kindknoten repräsentiert werden:
  53. –Die Liste der Parameterdeklarationen: Ein DecList-Knoten
  54. –Die Liste der Deklarationen lokaler Variablen: Ebenfalls ein DecList-Knoten
  55. –Der Prozedur-Rumpf: Ein StmList-Knoten, der die Sequenz von Anweisungen (”Statement List“) repräsentiert,aus denen der Rumpf besteht.
  56.  
  57. Was es mit der Klasse Sym auf sich hat, die nicht nur für Prodedurbezeichner, sondern für Bezeichner aller Art wird,ist weiter unten erläutert.
  58. •SimpleVar und ArrayVar sind Referenzen, also Speicherplatzrepräsentanten, die an bestimmten Stellen implizit dereferenziert werden. Im AST wird eine Dereferenzierung durch einen VarExp-Knoten dargestellt*/
  59.  
  60.  
  61. /* Hier beginnen der Hauptteil: Die Ableitungsregeln */
  62.  
  63. program ::= GlobalDeclarations;
  64.  
  65. typedec ::= TYPE IDENT EQ type SEMIC;
  66.  
  67. type ::= IDENT | ARRAY LBRACK INTLIT RBRACK OF type;
  68.  
  69. proc ::= PROC IDENT LPAREN paramList RPAREN LCURL decList instructList RCURL;
  70.  
  71. decList ::= var_declaration | /*epsilon*/;
  72. var_declaration ::= VAR IDENT COLON type SEMIC;
  73.  
  74. paramList ::= neparamlist| /*epsilon*/;
  75. neparamList ::= param COMMA neparamlist | param;
  76.  
  77. param ::= IDENT COLON Type | REF IDENT COLON type;
  78.  
  79. instructList ::= instruction instructlist | /*epsilon*/; /*Head Tail*/
  80.  
  81. instruction ::= WhileStatement | IfStatement | SEMIC | assignment;
  82.  
  83. lhs ::= IDENT | lhs LBRACK Exp RBRACK ;
  84.  
  85. assignment ::= lhs ASGN Exp SEMIC;
  86.  
  87. proccall
  88.  
  89. WhileStatement ::= WHILE LPAREN Exp RPAREN Statement;
  90.  
  91. IfStatement ::= IF LPAREN Exp RPAREN Statement
  92. |IF LPAREN Exp RPAREN instruction ELSE instruction;
  93. instruction
  94.  
  95. Exp ::= compareexp;
  96.  
  97. compareexp ::= expression EQ expression
  98. | expression NE expression
  99. | expression LT expression
  100. | expression LE expression
  101. | expression GT expression
  102. | expression GE expression
  103. | expression;
  104.  
  105. expression ::= expression PLUS term
  106. | expression MINUS term
  107. | term;
  108.  
  109. term ::= term STAR faktor
  110. | term SLASH faktor
  111. | faktor;
  112.  
  113. factor ::= MINUS primaryexp | primaryexp;
  114.  
  115. primaryexp ::= INTLIT | LPAREN Exp RPAREN | lhs;
  116.  
  117. //Alle Listen können leer sein
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement