blob: a6c3ca7e6c913d4b487d55bd278c626f2282c426 [file] [log] [blame]
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright (C) 2001 Gerwin Klein <lsf@jflex.de> *
* Copyright (C) 2001 Bernhard Rumpe <rumpe@in.tum.de> *
* All rights reserved. *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License. See the file *
* COPYRIGHT for more information. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
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()+"]"); }