import beaver.Symbol; import beaver.Scanner; %% %class ScannerLambda %extends Scanner %function nextToken %type Symbol %yylexthrow Scanner.Exception %eofval{ return new Symbol(Terminals.EOF); %eofval} %unicode %line %column %{ // Petit helpers pour simplifier la création de token. // On retient la position de chaque token pour la gestion d'erreur // voir beaver-rt/src/main/java/beaver/Symbol.java private Symbol newToken(short id) { return new Symbol(id, yyline + 1, yycolumn + 1, yylength(), null); } private Symbol newToken(short id, Object value) { return new Symbol(id, yyline + 1, yycolumn + 1, yylength(), value); } %} Identifiant = [a-z] Lambda = \\|λ Point = \. %% {Lambda} { return newToken(Terminals.LAMBDA); } {Point} { return newToken(Terminals.POINT); } {Identifiant} { return newToken(Terminals.IDENT, yytext()); } "(" { return newToken(Terminals.LPAR); } ")" { return newToken(Terminals.RPAR); } "\n" { return newToken(Terminals.NEWLINE); } [\s] {} [^] { throw new Scanner.Exception("caractère inattendu '" + yytext() + "'"); }