CSC448: Parsing: Clogs: Scanner [10/26] Previous pageContentsNext page

file:clogs.flex [source]
00001: package clogs.parser;
00002: 
00003: import java_cup.runtime.SymbolFactory;
00004: 
00005: %%
00006: 
00007: %class ClogsLexer
00008: %public
00009: %{
00010:    private SymbolFactory sf;
00011:    public ClogsLexer (java.io.InputStream r, SymbolFactory sf)
00012:    {
00013:      this (r);
00014:      this.sf = sf;
00015:    }
00016: %}
00017: %eofval{
00018:   return sf.newSymbol ("EOF", sym.EOF);
00019: %eofval}
00020: 
00021: %unicode
00022: 
00023: %cup
00024: %cupdebug
00025: 
00026: %char
00027: %column
00028: %line
00029: 
00030: 
00031: ALPHA=[A-Za-z_]
00032: DIGIT=[0-9]
00033: NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012]
00034: NEWLINE=\r|\n|\r\n
00035: WHITE_SPACE_CHAR=[\n\r\ \t\b\012]
00036: CHAR_TEXT=\\\"|[^\n\r\"]
00037: STRING_TEXT=(\\\"|[^\n\r\"]|\\{WHITE_SPACE_CHAR}+\\)*
00038: COMMENT_TEXT=([^*/\n]|[^*\n]"/"[^*\n]|[^/\n]"*"[^/\n]|"*"[^/\n]|"/"[^*\n])*
00039: IDENT={ALPHA}({ALPHA}|{DIGIT}|_)*
00040: 
00041: %% 
00042: 
00043: <YYINITIAL> {
00044:   "if" { return sf.newSymbol ("if", sym.IF); }
00045:   "else" { return sf.newSymbol ("else", sym.ELSE); }
00046:   "while" { return sf.newSymbol ("while", sym.WHILE); }
00047:   "goto" { return sf.newSymbol ("goto", sym.GOTO); }
00048:   "return" { return sf.newSymbol ("return", sym.RETURN); }
00049:   "skip" { return sf.newSymbol ("return", sym.SKIP); }
00050:   "new" { return sf.newSymbol ("new", sym.NEW); }
00051:   "void" { return sf.newSymbol ("void", sym.VOID); }
00052:   "int" { return sf.newSymbol ("int", sym.INT); }
00053: 
00054:   "[" { return sf.newSymbol ("LeftBrack", sym.LBRACK); }
00055:   "]" { return sf.newSymbol ("RightBrack", sym.RBRACK); }
00056:   "{" { return sf.newSymbol ("LeftBrace", sym.LBRACE); }
00057:   "}" { return sf.newSymbol ("RightBrace", sym.RBRACE); }
00058:   "(" { return sf.newSymbol ("LeftParen", sym.LPAREN); }
00059:   ")" { return sf.newSymbol ("RightParen", sym.RPAREN); }
00060:   "," { return sf.newSymbol ("Comma", sym.COMMA); }
00061:   ";" { return sf.newSymbol ("Semicolon", sym.SEMI); }
00062:   ":" { return sf.newSymbol ("Colon", sym.COLON); }
00063:   "::" { return sf.newSymbol ("ColonColon", sym.COLONCOLON); }
00064:   "=" { return sf.newSymbol ("Equals", sym.EQUALS); }
00065:   "!" { return sf.newSymbol ("Bang", sym.BANG); }
00066:   "==" { return sf.newSymbol ("EqualsEquals", sym.EQUALSEQUALS); }
00067:   "!=" { return sf.newSymbol ("BangEquals", sym.BANGEQUALS); }
00068:   "<" { return sf.newSymbol ("LessThan", sym.LESSTHAN); }
00069:   ">" { return sf.newSymbol ("GreaterThan", sym.GREATERTHAN); }
00070:   "<=" { return sf.newSymbol ("Leq", sym.LEQ); }
00071:   ">=" { return sf.newSymbol ("Geq", sym.GEQ); }
00072:   "|" { return sf.newSymbol ("Bar", sym.BAR); }
00073:   "^" { return sf.newSymbol ("Caret", sym.CARET); }
00074:   "&" { return sf.newSymbol ("Ampersand", sym.AMP); }
00075:   "||" { return sf.newSymbol ("BarBar", sym.BARBAR); }
00076:   "&&" { return sf.newSymbol ("AmpersandAmpersand", sym.AMPAMP); }
00077:   "+" { return sf.newSymbol ("Plus", sym.PLUS); }
00078:   "-" { return sf.newSymbol ("Minus", sym.MINUS); }
00079:   "*" { return sf.newSymbol ("Times", sym.TIMES); }
00080:   "/" { return sf.newSymbol ("Divide", sym.DIVIDE); }
00081:   "%" { return sf.newSymbol ("Mod", sym.MOD); }
00082: 
00083:   {NONNEWLINE_WHITE_SPACE_CHAR}+ { }
00084: 
00085:   {IDENT} {
00086:     return sf.newSymbol ("Identifier", sym.IDENTIFIER, yytext ());
00087:   }
00088: 
00089:   {DIGIT}+ {
00090:     int i = Integer.parseInt (yytext ());
00091:     return sf.newSymbol ("IntegerConstant", sym.INTEGER_CONSTANT, new Integer (i));
00092:   }
00093: 
00094:   ' {CHAR_TEXT} ' {
00095:     return sf.newSymbol ("CharacterConstant", sym.CHARACTER_CONSTANT, yytext ().charAt (1));
00096:   }
00097: 
00098:   \" {STRING_TEXT} \" {
00099:     String str = yytext ().substring (1, yylength () - 1);
00100:     return sf.newSymbol ("StringConstant", sym.STRING_CONSTANT, str);
00101:   }
00102: }
00103: 
00104: {NEWLINE} { }
00105: 
00106: . {
00107:   System.out.println ("Illegal character: <" + yytext () + ">");
00108:   Utility.error (Utility.E_UNMATCHED);
00109: }
00110: 
00111: 

Previous pageContentsNext page