diff --git a/lib/lexer.l b/lib/lexer.l index df33f05..7a798b6 100644 --- a/lib/lexer.l +++ b/lib/lexer.l @@ -1,54 +1,54 @@ -%s ST_QUOTE2 ST_QUOTE1 ST_COMMENT NST +%s ST_QUOTE2 ST_QUOTE1 ST_COMMENT %% -"//".* /* skip over C++-style comments */ +"//".* /* skip over C++-style comments */ -[ \t\n] /* skip space */ +\s+ /* skip space */ -"for" return 'FOR'; -"while" return 'WHILE'; -"break" return 'BREAK'; -"continue" return 'CONTINUE'; -"return" return 'RETURN'; -"do" return 'DO'; -"if" return 'IF'; -"else" return 'ELSE'; -"try" return 'TRY'; -"catch" return 'CATCH'; -"twait" return 'TWAIT'; -"function" return 'FUNCTION'; -"mkevent" return 'MKEVENT'; -"finally" return 'FINALLY'; -"case" return 'CASE'; -"switch" return 'SWITCH'; -"default" return 'DEFAULT'; -"this" return 'THIS'; -"with" return 'WITH'; -"#!"[ ]*[/].* return 'SHBANG'; +"for" return 'FOR'; +"while" return 'WHILE'; +"break" return 'BREAK'; +"continue" return 'CONTINUE'; +"return" return 'RETURN'; +"do" return 'DO'; +"if" return 'IF'; +"else" return 'ELSE'; +"try" return 'TRY'; +"catch" return 'CATCH'; +"twait" return 'TWAIT'; +"function" return 'FUNCTION'; +"mkevent" return 'MKEVENT'; +"finally" return 'FINALLY'; +"case" return 'CASE'; +"switch" return 'SWITCH'; +"default" return 'DEFAULT'; +"this" return 'THIS'; +"with" return 'WITH'; +"#!"[ ]*[/].* return 'SHBANG'; -[a-zA-Z_0-9]+[ ^]*[:] { +[a-zA-Z_0-9]+[ ^]*[:] { yytext = yytext.replace (/[\s:]/g, ""); return 'LABEL'; } -[a-zA-Z_][a-zA-Z_0-9]* { return 'ID'; } +[a-zA-Z_][a-zA-Z_0-9]* { return 'ID'; } -"{" { this.begin ('NST'); return 'LBRACE'; } -"}" { this.popState (); return 'RBRACE'; } -"(" { this.begin ('NST'); return 'LPAREN'; } -")" { this.popState(); return 'RPAREN'; } -"[" { this.begin ('NST'); return 'LBRACKET'; } -"]" { this.popState (); return 'RBRACKET'; } -";" return "SEMICOLON"; -',' return 'COMMA'; -':' return 'COLON'; +"{" return 'LBRACE'; +"}" return 'RBRACE'; +"(" return 'LPAREN'; +")" return 'RPAREN'; +"[" return 'LBRACKET'; +"]" return 'RBRACKET'; +";" return "SEMICOLON"; +',' return 'COMMA'; +':' return 'COLON'; -"\"" { this.begin ('ST_QUOTE2'); return 'QUOTE2'; } -"'" { this.begin ('ST_QUOTE1'); return 'QUOTE1'; } -"/*" { this.begin ('ST_COMMENT'); } -[^/{}()\[\];,:"'\s]+ return 'GENERIC'; -. return 'GENERIC'; +"\"" { this.begin ('ST_QUOTE2'); return 'QUOTE2'; } +"'" { this.begin ('ST_QUOTE1'); return 'QUOTE1'; } +"/*" { this.begin ('ST_COMMENT'); } +[^/{}()\[\];,:"'\s]+ return 'GENERIC'; +. return 'GENERIC'; "\\". return 'STRING_ATOM'; [^\\"]+ return 'STRING_ATOM';