Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 22nd, 2012  |  syntax: None  |  size: 2.31 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*
  2.  * parser.cup -- SPL parser specification
  3.  */
  4.  
  5. package parse;
  6.  
  7. import java_cup.runtime.*;
  8.  
  9. parser code {:
  10.  
  11.   public void syntax_error(Symbol currToken) {
  12.     System.out.println(
  13.       "**** Error: syntax error" +
  14.       " in line " + currToken.left +
  15.       ", column " + currToken.right
  16.     );
  17.     System.exit(0);
  18.   }
  19. :}
  20.  
  21. /* Terminals (tokens returned by lexer). */
  22.  
  23. terminal                LPAREN, RPAREN, LBRACK, RBRACK, LCURL, RCURL;
  24. terminal                EQ, NE, LT, LE, GT, GE;
  25. terminal                ASGN, COLON, COMMA, SEMIC;
  26. terminal                PLUS, MINUS, STAR, SLASH;
  27. terminal String IDENT;
  28. terminal Integer INTLIT;
  29. terminal                WHILE, ELSE, OF, IF, ARRAY, PROC, REF, TYPE, VAR;
  30.  
  31. /*non terminals*/
  32.  
  33. non terminal    program;
  34. non terminal    anweisungen, anweisung, kommando;
  35. non terminal    zuweisung, ausdruck, deklaration, deklarationen, typdef;
  36. non terminal    schleife, elif, funkaufruf, funkkopf, feld, funksignatur, funkdef, feldtyp;
  37. non terminal    bedingung, parameterliste, parameter, verglop;
  38. non terminal    mulop1, addop1;
  39.  
  40. /* Startzeichen*/
  41.  
  42. start with program;
  43.  
  44. /*Regeln*/
  45. program                 ::= deklarationen anweisungen funkdef;
  46. anweisungen             ::= anweisung anweisungen |;
  47. anweisung               ::= kommando SEMIC | schleife | elif;
  48. zuweisung               ::= IDENT ASGN ausdruck;
  49. ausdruck                ::= INTLIT | IDENT | mulop1 | addop1;
  50. kommando                ::= zuweisung | funkaufruf | typdef;
  51. funkdef                 ::= PROC funksignatur LCURL deklarationen anweisungen RCURL |;
  52. funksignatur    ::= IDENT LPAREN funkkopf RPAREN;
  53. funkkopf                ::=  | parameterliste;
  54. deklarationen   ::= deklaration deklarationen |;
  55. deklaration             ::= VAR IDENT COLON IDENT SEMIC;
  56. parameterliste  ::= parameter | parameter COMMA parameterliste;
  57. parameter               ::= IDENT COLON IDENT|REF IDENT COLON IDENT;
  58. mulop1                  ::= LPAREN ausdruck STAR ausdruck RPAREN
  59.                                 | LPAREN ausdruck SLASH ausdruck RPAREN;
  60.  
  61. addop1                  ::= LPAREN ausdruck PLUS ausdruck  RPAREN
  62.                                 | LPAREN ausdruck MINUS ausdruck RPAREN;
  63.  
  64. typdef                  ::= TYPE IDENT EQ IDENT | feld;
  65. feld                    ::= ARRAY LBRACK ausdruck RBRACK OF feldtyp;
  66. feldtyp                 ::= IDENT | feld ;
  67. elif                    ::= IF LPAREN bedingung RPAREN LCURL anweisungen RCURL ELSE LCURL anweisungen RCURL;
  68. elif                    ::= IF LPAREN bedingung RPAREN LCURL anweisungen RCURL;
  69. bedingung               ::= IDENT verglop ausdruck;
  70. verglop                 ::= EQ | NE | LT | LE | GT | GE;
  71. schleife                ::= WHILE LPAREN bedingung RPAREN LCURL anweisungen RCURL;