1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright (C) 2001 Gerwin Klein <lsf@jflex.de> *
* Copyright (C) 2001 Bernhard Rumpe <rumpe@in.tum.de> *
* All rights reserved. *
* *
* License: BSD *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
import java_cup.runtime.Symbol;
%%
%cup
%implements sym
%{
SymTab symtab; // externe symbol table
public void setSymtab(SymTab symtab) {
this.symtab = symtab;
}
private Symbol sym(int sym) {
return new Symbol(sym);
}
private Symbol sym(int sym, Object val) {
return new Symbol(sym, val);
}
%}
%%
"arguments" { return sym(ARGUMENTS); }
"input" { return sym(INPUT); }
"functions" { return sym(FUNCTIONS); }
"output" { return sym(OUTPUT); }
"end" { return sym(END); }
"if" { return sym(IF); }
"then" { return sym(THEN); }
"else" { return sym(ELSE); }
"fi" { return sym(FI); }
[a-z]+ { symtab.enter(yytext(),new SymtabEntry(yytext()));
return sym(ID,yytext()); }
[0-9]+ { return sym(NUMBER,yytext()); }
"," { return sym(COMMA); }
"(" { return sym(LPAR); }
")" { return sym(RPAR); }
"=" { return sym(EQ); }
"-" { return sym(MINUS); }
"+" { return sym(PLUS); }
"*" { return sym(TIMES); }
"/" { return sym(DIV); }
"<" { return sym(LE); }
"<=" { return sym(LEQ); }
[\ \t\b\f\r\n]+ { /* eat whitespace */ }
"//"[^\n]* { /* one-line comment */ }
. { throw new Error("Unexpected character ["+yytext()+"]"); }
|