1 // JFlex parser specification written by
4 // University of California, Irvine
6 // Technische Universitaet Muenchen
7 // Fakultaet fuer Informatik
9 import java_cup.runtime.Symbol;
10 import java_cup.runtime.ComplexSymbolFactory;
11 import java_cup.runtime.ComplexSymbolFactory.Location;
24 StringBuffer string = new StringBuffer();
25 public Lexer(java.io.Reader in, ComplexSymbolFactory sf){
29 ComplexSymbolFactory symbolFactory;
31 private Symbol symbol(String name, int sym) {
32 return symbolFactory.newSymbol(name, sym, new Location(yyline+1,yycolumn+1,yychar), new Location(yyline+1,yycolumn+yylength(),yychar+yylength()));
35 private Symbol symbol(String name, int sym, Object val) {
36 Location left = new Location(yyline+1,yycolumn+1,yychar);
37 Location right= new Location(yyline+1,yycolumn+yylength(), yychar+yylength());
38 return symbolFactory.newSymbol(name, sym, left, right,val);
40 private Symbol symbol(String name, int sym, Object val,int buflength) {
41 Location left = new Location(yyline+1,yycolumn+yylength()-buflength,yychar+yylength()-buflength);
42 Location right= new Location(yyline+1,yycolumn+yylength(), yychar+yylength());
43 return symbolFactory.newSymbol(name, sym, left, right,val);
45 private void error(String message) {
46 System.out.println("Error at line "+(yyline+1)+", column "+(yycolumn+1)+" : "+message);
51 return symbolFactory.newSymbol("EOF", EOF, new Location(yyline+1,yycolumn+1,yychar), new Location(yyline+1,yycolumn+1,yychar+1));
55 Ident = [a-zA-Z$_] [a-zA-Z0-9$_]*
57 new_line = \r|\n|\r\n;
59 white_space = {new_line} | [ \t\f]
67 "int" { return symbol("int",TYPE, "INT" ); }
68 "short" { return symbol("short",TYPE, "SHORT" ); }
69 "byte" { return symbol("byte",TYPE, "BYTE" ); }
70 "long" { return symbol("long",TYPE, "LONG" ); }
71 "float" { return symbol("float",TYPE, "FLOAT" ); }
72 "double" { return symbol("double",TYPE, "DOUBLE" ); }
73 "char" { return symbol("char",TYPE, "CHAR" ); }
74 "string" { return symbol("string",TYPE, "STRING" ); }
75 "boolean" { return symbol("boolean",TYPE, "BOOL" ); }
76 "void" { return symbol("void",TYPE, "VOID" ); }
77 "public" { return symbol("public",PUBLIC); }
78 "interface" { return symbol("interface",INTERFACE); }
79 "capability" { return symbol("capability",CAPABILITY); }
80 "description" { return symbol("description",DESCRIPTION); }
81 "method" { return symbol("method",METHOD); }
82 "requires" { return symbol("requires",REQUIRES); }
83 "with" { return symbol("with",WITH); }
84 "as" { return symbol("as",AS); }
87 {Ident} { return symbol("Identifier",IDENT, yytext()); }
101 \" { string.setLength(0); yybegin(STRING); }
102 ";" { return symbol("semicolon",SEMICOLON); }
103 "," { return symbol("comma",COMMA); }
104 "." { return symbol("dot",DOT); }
105 "(" { return symbol("(",LPAR); }
106 ")" { return symbol(")",RPAR); }
107 "{" { return symbol("{",BEGIN); }
108 "}" { return symbol("}",END); }
109 "=" { return symbol("=",ASSIGN); }
111 {white_space} { /* ignore */ }
116 \" { yybegin(YYINITIAL);
117 return symbol("StringConst",STRINGCONST,string.toString(),string.length()); }
118 [^\n\r\"\\]+ { string.append( yytext() ); }
119 \\t { string.append('\t'); }
120 \\n { string.append('\n'); }
122 \\r { string.append('\r'); }
123 \\\" { string.append('\"'); }
124 \\ { string.append('\\'); }
129 .|\n { /* throw new Error("Illegal character <"+ yytext()+">");*/
130 error("Illegal character <"+ yytext()+">");