|
Packit Service |
360c39 |
%{
|
|
Packit Service |
360c39 |
#include "lang.h"
|
|
Packit Service |
360c39 |
#include "parser.h"
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
#define EXTRA ((struct lgfs2_lang_state *)yyextra)
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
#define P(token, type, text) do {\
|
|
Packit Service |
360c39 |
*(yylval) = ast_new(type, text);\
|
|
Packit Service |
360c39 |
if (*(yylval) == NULL) {\
|
|
Packit Service |
360c39 |
EXTRA->ls_errnum = errno;\
|
|
Packit Service |
360c39 |
return 1;\
|
|
Packit Service |
360c39 |
}\
|
|
Packit Service |
360c39 |
return (TOK_##token);\
|
|
Packit Service |
360c39 |
} while(0)
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
#define COLNUM EXTRA->ls_colnum
|
|
Packit Service |
360c39 |
#define YY_USER_ACTION COLNUM += yyleng;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
%}
|
|
Packit Service |
360c39 |
%option bison-bridge reentrant
|
|
Packit Service |
360c39 |
%option warn debug
|
|
Packit Service |
360c39 |
%option nounput noinput
|
|
Packit Service |
360c39 |
%option noyywrap
|
|
Packit Service |
360c39 |
%option extra-type="struct lgfs2_lang_state *"
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
letter [a-zA-Z_]
|
|
Packit Service |
360c39 |
decdigit [0-9]
|
|
Packit Service |
360c39 |
decnumber -?{decdigit}+
|
|
Packit Service |
360c39 |
hexdigit [0-9a-fA-F]
|
|
Packit Service |
360c39 |
hexnumber -?0x{hexdigit}+
|
|
Packit Service |
360c39 |
number ({decnumber}|{hexnumber})
|
|
Packit Service |
360c39 |
offset \+{number}
|
|
Packit Service |
360c39 |
id {letter}({letter}|{decdigit}|\.)*
|
|
Packit Service |
360c39 |
string \'([^\']|\\\')*\'
|
|
Packit Service |
360c39 |
path \'\/([^\']|\\\')*\'
|
|
Packit Service |
360c39 |
ccomment \/\/.*\n
|
|
Packit Service |
360c39 |
shcomment \#.*\n
|
|
Packit Service |
360c39 |
comment ({ccomment}|{shcomment})
|
|
Packit Service |
360c39 |
whitespace [ \t\r]+
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
%%
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
\{ {
|
|
Packit Service |
360c39 |
return TOK_LBRACE;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
\} {
|
|
Packit Service |
360c39 |
return TOK_RBRACE;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
\[ {
|
|
Packit Service |
360c39 |
return TOK_LBRACKET;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
\] {
|
|
Packit Service |
360c39 |
P(RBRACKET, AST_EX_SUBSCRIPT, "[ ]");
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
\, {
|
|
Packit Service |
360c39 |
return TOK_COMMA;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
\: {
|
|
Packit Service |
360c39 |
P(COLON, AST_EX_FIELDSPEC, yytext);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
\; {
|
|
Packit Service |
360c39 |
return TOK_SEMI;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
set {
|
|
Packit Service |
360c39 |
P(SET, AST_ST_SET, yytext);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
get {
|
|
Packit Service |
360c39 |
P(GET, AST_ST_GET, yytext);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
state {
|
|
Packit Service |
360c39 |
P(STATE, AST_KW_STATE, yytext);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
{path} {
|
|
Packit Service |
360c39 |
yytext[yyleng-1] = '\0';
|
|
Packit Service |
360c39 |
P(PATH, AST_EX_PATH, yytext + 1);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
{string} {
|
|
Packit Service |
360c39 |
yytext[yyleng-1] = '\0';
|
|
Packit Service |
360c39 |
P(STRING, AST_EX_STRING, yytext + 1);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
{offset} {
|
|
Packit Service |
360c39 |
P(OFFSET, AST_EX_OFFSET, yytext);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
{number} {
|
|
Packit Service |
360c39 |
P(NUMBER, AST_EX_NUMBER, yytext);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
{id} {
|
|
Packit Service |
360c39 |
P(ID, AST_EX_ID, yytext);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
{comment} {
|
|
Packit Service |
360c39 |
COLNUM = 0;
|
|
Packit Service |
360c39 |
EXTRA->ls_linenum++;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
<<EOF>> {
|
|
Packit Service |
360c39 |
return 0;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
\n {
|
|
Packit Service |
360c39 |
COLNUM = 0;
|
|
Packit Service |
360c39 |
EXTRA->ls_linenum++;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
{whitespace} ;
|
|
Packit Service |
360c39 |
. {
|
|
Packit Service |
360c39 |
printf("Unexpected character '%s' on line %d column %d\n",
|
|
Packit Service |
360c39 |
yytext, yylineno, COLNUM);
|
|
Packit Service |
360c39 |
return 1;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
%%
|