| %{ |
| |
| char *rcs_lualex = "$Id: $"; |
| |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "opcode.h" |
| #include "hash.h" |
| #include "inout.h" |
| #include "table.h" |
| #include "y.tab.h" |
| |
| #undef input |
| #undef unput |
| |
| static Input input; |
| static Unput unput; |
| |
| void lua_setinput (Input fn) |
| { |
| input = fn; |
| } |
| |
| void lua_setunput (Unput fn) |
| { |
| unput = fn; |
| } |
| |
| char *lua_lasttext (void) |
| { |
| return yytext; |
| } |
| |
| %} |
| |
| |
| %% |
| [ \t]* ; |
| ^"$debug" {yylval.vInt = 1; return DEBUG;} |
| ^"$nodebug" {yylval.vInt = 0; return DEBUG;} |
| \n lua_linenumber++; |
| "--".* ; |
| "local" return LOCAL; |
| "if" return IF; |
| "then" return THEN; |
| "else" return ELSE; |
| "elseif" return ELSEIF; |
| "while" return WHILE; |
| "do" return DO; |
| "repeat" return REPEAT; |
| "until" return UNTIL; |
| "function" { |
| yylval.vWord = lua_nfile-1; |
| return FUNCTION; |
| } |
| "end" return END; |
| "return" return RETURN; |
| "local" return LOCAL; |
| "nil" return NIL; |
| "and" return AND; |
| "or" return OR; |
| "not" return NOT; |
| "~=" return NE; |
| "<=" return LE; |
| ">=" return GE; |
| ".." return CONC; |
| \"[^\"]*\" | |
| \'[^\']*\' { |
| yylval.vWord = lua_findenclosedconstant (yytext); |
| return STRING; |
| } |
| [0-9]+("."[0-9]*)? | |
| ([0-9]+)?"."[0-9]+ | |
| [0-9]+("."[0-9]*)?[dDeEgG][+-]?[0-9]+ | |
| ([0-9]+)?"."[0-9]+[dDeEgG][+-]?[0-9]+ { |
| yylval.vFloat = atof(yytext); |
| return NUMBER; |
| } |
| [a-zA-Z_][a-zA-Z0-9_]* { |
| yylval.vWord = lua_findsymbol (yytext); |
| return NAME; |
| } |
| . return *yytext; |
| |