package step.core; /* JFlex example: part of Java language lexer specification */ import java_cup.runtime.*; /** * This class is a simple example lexer. */ %% %unicode %line %column %class StepScanner %cupsym StepParserSymbols %cup // %debug %{ StringBuffer string = new StringBuffer(); private Symbol symbol(int type) { return new Symbol(type, yyline, yycolumn); } private Symbol symbol(int type, Object value) { return new Symbol(type, yyline, yycolumn, value); } %} LineTerminator = \r|\n|\r\n WhiteSpace = {LineTerminator} | [ \t\f] Comment = "/*" [^*] ~"*/" | "/*" "*"+ "/" Identifier = [A-Za-z][A-Za-z0-9_]* Integer = [0-9]+ String = '([^']|{LineTerminator}|'')*' EncodedString = \"[^\"]*\" Binary = %[01]+ Enum = \.{Identifier}\. digit = [0-9] blank = [ \t ]* %% "&"[sS][cC][oO][pP][eE] {return symbol(StepParserSymbols.SCOPE);} [iI][sS][oO]"-10303-21"{blank}";" {return symbol(StepParserSymbols.ISO_10303_21);} [eE][nN][dD]"-"[iI][sS][oO]"-10303-21"{blank}";" {return symbol(StepParserSymbols.END_ISO_10303_21);} [Dd][Aa][Tt][Aa]{blank}";" {return symbol(StepParserSymbols.DATA);} [eE][nN][dD][sS][cC][oO][pP][eE]{blank}";" {return symbol(StepParserSymbols.ENDSCOPE);} [eE][nN][dD][Ss][Ee][Cc]{blank}";" {return symbol(StepParserSymbols.ENDSEC);} [Hh][Ee][Aa][Dd][Ee][Rr]{blank}";" {return symbol(StepParserSymbols.HEADER);} ";" {return symbol(StepParserSymbols.SEMI);} "," {return symbol(StepParserSymbols.COMMA); } "(" {return symbol(StepParserSymbols.LEFT_PAREN);} ")" {return symbol(StepParserSymbols.RIGHT_PAREN);} "/" {return symbol(StepParserSymbols.SLASH);} "$" {return symbol(StepParserSymbols.MISSING);} "*" {return symbol(StepParserSymbols.REDEFINE);} "."[fF]"." { return symbol(StepParserSymbols.LOGICAL_FALSE); } "."[uU]"." { return symbol(StepParserSymbols.LOGICAL_UNKNOWN); } "."[tT]"." { return symbol(StepParserSymbols.LOGICAL_TRUE); } {Enum} { StringBuffer sb = new StringBuffer(yytext()); return symbol(StepParserSymbols.ENUMERATION, sb.substring(1, sb.length()-1)); } "!"{Identifier} { return symbol(StepParserSymbols.USER_DEFINED_KEYWORD, yytext()); } "#"({digit}{1,9}){blank}"=" { StringBuffer sb = new StringBuffer(yytext()); int pos = sb.indexOf(" "); if (pos == -1) pos = sb.indexOf("\t"); if (pos == -1) pos = sb.indexOf("="); return symbol(StepParserSymbols.INSTANCE_LABEL, new Integer(sb.substring(1, pos))); } "#"({digit}{1,9}) { StringBuffer sb = new StringBuffer(yytext()); return symbol(StepParserSymbols.INSTANCE_REF, new Integer(sb.substring(1, sb.length()))); } [+-]?{Integer}"."{Integer}?(("E"|"e")[+-]?{Integer})? { return symbol(StepParserSymbols.REAL, new Double(yytext())); } [+-]?{Integer}("E"|"e")[+-]?{Integer} { return symbol(StepParserSymbols.REAL, new Double(yytext())); } -{Integer} { String t = yytext(); return symbol(StepParserSymbols.INTEGER, new Integer(yytext())); } \+{Integer} { return symbol(StepParserSymbols.INTEGER, new Integer(yytext().substring(1))); } {Integer} { return symbol(StepParserSymbols.INTEGER, new Integer(yytext())); } {Identifier} { return symbol(StepParserSymbols.KEYWORD, yytext()); } {String} { StringBuffer sb = new StringBuffer(yytext()); return symbol(StepParserSymbols.STRING, sb.substring(1, sb.length()-1)); } {EncodedString} { StringBuffer sb = new StringBuffer(yytext()); return symbol(StepParserSymbols.ENCODED_STRING, sb.substring(1, sb.length()-1)); } {Binary} { StringBuffer sb = new StringBuffer(yytext()); return symbol(StepParserSymbols.BINARY, sb.substring(1, sb.length())); } {Comment} { /* ignore */ } {WhiteSpace} { /* ignore */ } /* error fallback */ .|\n { throw new Error("Illegal character <"+yytext()+">"); }