mirror of https://github.com/lua/lua
86 lines
1.6 KiB
Plaintext
86 lines
1.6 KiB
Plaintext
%{
|
|
|
|
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;
|
|
|