76 lines
2.5 KiB
Plaintext
76 lines
2.5 KiB
Plaintext
/* **********************************************
|
|
* 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 */ }
|
|
<YYINITIAL> {
|
|
"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); }
|
|
}
|
|
|
|
<NUM> {
|
|
{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); }
|
|
|
|
<ID> {
|
|
{AllChars} { idValue += yytext(); }
|
|
}
|
|
<ID> [^] { 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() + ">"); */}
|
|
|
|
|
|
|