/* * JFlex source of a * scanner for the Oberon-2 Programming Language * * Author: James Power, * Affiliation: Dept. of Computer Science, National University of Ireland, * Maynooth, Co. Kildare, Ireland. * Last Revised: 24 November 1998 * * Based on: "The Programming Language Oberon" * H. Mossenbock, N. Wirth, ETH Zurich, 1992-1996 * * For more information on Oberon see http://www.oberon.ethz.ch/language.html */ %% %class OberonLexer %line %public %integer %{ /* Public interface to some internals */ public String get_yytext() { return yytext(); } public int get_yyline() { return yyline; } private int nestLevel; %} letter = [A-Za-z] digit = [0-9] hexDigit = {digit}|[A-F] ScaleFactor = [DE][+\-]?{digit}+ DIGITDOTHACK = {digit}+".." INTEGER = {digit}+|{digit}{hexDigit}*"H" REAL = {digit}+"."{digit}*{ScaleFactor}? STRING = ['][^']*[']|["][^"]*["] IDENT = {letter}({letter}|{digit})* CHAR = {digit}{hexDigit}*"X" DOSEOF = \x1A WS = [ \t] NL = [\n\r] %state IN_COMMENT %% { "(*" { nestLevel=1; yybegin(IN_COMMENT); } {WS} { /* Ignore whitespace */ ; } {NL} { yyline++; } ":=" { return(OberonParser.ASSIGN); } "<=" { return(OberonParser.LTEQ); } ">=" { return(OberonParser.GTEQ); } ".." { return(OberonParser.DOTDOT); } "ARRAY" { return(OberonParser.ARRAY); } "BEGIN" { return(OberonParser.OBEGIN); } "BY" { return(OberonParser.BY); } "CASE" { return(OberonParser.CASE); } "CONST" { return(OberonParser.CONST); } "DIV" { return(OberonParser.DIV); } "DO" { return(OberonParser.DO); } "ELSE" { return(OberonParser.ELSE); } "ELSIF" { return(OberonParser.ELSIF); } "END" { return(OberonParser.END); } "EXIT" { return(OberonParser.EXIT); } "FOR" { return(OberonParser.FOR); } "IF" { return(OberonParser.IF); } "IMPORT" { return(OberonParser.IMPORT); } "IN" { return(OberonParser.IN); } "IS" { return(OberonParser.IS); } "LOOP" { return(OberonParser.LOOP); } "MOD" { return(OberonParser.MOD); } "MODULE" { return(OberonParser.MODULE); } "NIL" { return(OberonParser.NIL); } "OF" { return(OberonParser.OF); } "OR" { return(OberonParser.OR); } "POINTER" { return(OberonParser.POINTER); } "PROCEDURE" { return(OberonParser.PROCEDURE); } "RECORD" { return(OberonParser.RECORD); } "REPEAT" { return(OberonParser.REPEAT); } "RETURN" { return(OberonParser.RETURN); } "THEN" { return(OberonParser.THEN); } "TO" { return(OberonParser.TO); } "TYPE" { return(OberonParser.TYPE); } "UNTIL" { return(OberonParser.UNTIL); } "VAR" { return(OberonParser.VAR); } "WHILE" { return(OberonParser.WHILE); } "WITH" { return(OberonParser.WITH); } {DIGITDOTHACK} { yypushback(2); return(OberonParser.CONSTnumber); } {INTEGER} { return(OberonParser.CONSTnumber); } {REAL} { return(OberonParser.CONSTnumber); } {CHAR} { return(OberonParser.CONSTchar); } {STRING} { return(OberonParser.CONSTstring); } {IDENT} { return(OberonParser.ident); } {DOSEOF} { return(YYEOF); } . { return(yytext().charAt(0)); } } { "(*" { nestLevel++; } "*)" { nestLevel--; if (nestLevel==0) yybegin(YYINITIAL); } {NL} { yyline++; } . { /* Ignore comment contents */ ; } }