/* ********************************************** * Duale Hochschule Baden-Württemberg Karlsruhe * Prof. Dr. Jörn Eisenbiegler * * Vorlesung Übersetzerbau * Praxis AS-Scanner mit JFlex 4 * * ********************************************** */ package de.dhbw.compiler.jflexasscanner; %% %class JFlexASScanner %function nextToken %type Token %unicode %line %column %public %final %xstate FRAC, EXP, STR, NULL, ID, NUM %{ String idValue = ""; int intValue = 0; %} WhiteSpace = [ \t\b\r\n]+ SmallChars = [a-z] CapitalChars = [A-Z] Numbers = [0-9] AllChars = [a-zA-Z0-9] %eofval{ return new Token(Token.EOF, "", yyline+1, yycolumn+1); %eofval} %% //[^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); } {WhiteSpace} { /* Ignore */ } { "null" { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); } {AllChars} { yybegin(ID); idValue = yytext(); System.out.println("BEGIN ID <"+idValue+">"); } {Numbers} { yybegin(NUM); intValue = yycharat(0)-'0'; } [\[] { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); } [\]] { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); } [,] { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); } } { {Numbers} { intValue = intValue * 10 + yycharat(0) - '0'; } {SmallChars} | {CapitalChars} { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); } [^] { yybegin(YYINITIAL); yypushback(1); return new NumToken(String.valueOf(intValue), yyline+1, yycolumn+1); } { {AllChars} { idValue += yytext(); } } [^] { yybegin(YYINITIAL);System.out.println("PUSHBACK BEFORE <"+yytext()+">"); yypushback(1); System.out.println("PUSHBACK AFTER <"+yytext()+">"); System.out.println("LINE <"+yyline+"> / COLUMN <"+yycolumn+">"); return new Token(Token.ID, idValue, yyline+1, yycolumn); } [^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); /*throw new Error("Illegal character <" + yytext() + ">"); */}