diff options
Diffstat (limited to 'tools/d2c/tokens.l')
-rw-r--r-- | tools/d2c/tokens.l | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/tools/d2c/tokens.l b/tools/d2c/tokens.l new file mode 100644 index 0000000..e48d079 --- /dev/null +++ b/tools/d2c/tokens.l @@ -0,0 +1,132 @@ + +%top { + +#include "grammar.h" + +} + + + +%{ + + //typedef struct _rented_coder rented_coder; + + +//#include "d2c-d2c_gram.h" + +#include <ctype.h> +#include <string.h> + + +#include "manual.h" + + + +%} + +%option noyywrap +%option nounput + //%option noinput +%option yylineno +%option stack +%option noyy_top_state + + //%option reentrant + //%option bison-bridge + +/* %option bison-bridge */ +/* %option bison-locations */ +/* %option ecs */ +/* %option nodefault */ +/* %option noyywrap */ +/* %option reentrant */ + + +%x comments + +%x ins_name try_details ins_details +%x encoding encoding_type encoding_content + +%x encoding_bits encoding_bits_size + +%x raw_line + + + +%% + + +[ \t\n]+ { } + +"/*" { BEGIN(comments); } +<comments>"*/" { BEGIN(INITIAL); } +<comments>[^*\n] { } +<comments>"Copyright"[^\n]* { yylvalp->string = strdup(yytext); return COPYRIGHT; } +<comments>"*" { } +<comments>"\n" { } + + +"@title" { BEGIN(ins_name); return TITLE; } + +<ins_name>[ ][A-Za-z-]+ { yylvalp->string = strdup(yytext + 1); BEGIN(try_details); return INS_NAME; } +<try_details>[ ,/] { BEGIN(ins_details); } +<try_details>[\n] { BEGIN(INITIAL); } + +<ins_details>[^\n]* { yylvalp->cstring = yytext; return INS_DETAILS; } +<ins_details>[\n] { BEGIN(INITIAL); } + + + +"@encoding" { BEGIN(encoding); return ENCODING; } + +<encoding>[ ] { } +<encoding>"(" { BEGIN(encoding_type); } + +<encoding_type>[A-Za-z] { yylvalp->string = strdup(yytext); return TYPE; } +<encoding_type>[0-9]+ { yylvalp->integer = atoi(yytext); return NUMBER; } +<encoding_type>")" { BEGIN(encoding); } + +<encoding>"{" { BEGIN(encoding_content); } +<encoding_content>[ \t\n]+ { } +<encoding_content>"}" { BEGIN(INITIAL); } + + + +<encoding_content>"@half " { yy_push_state(raw_line); return HALF; } +<encoding_content>"@word " { yy_push_state(raw_line); return WORD; } + + +<raw_line>[^\n]+ { yylvalp->cstring = yytext; return RAW_LINE; } +<raw_line>"\n" { yy_pop_state(); } + + + + +<encoding_content>"@syntax " { yy_push_state(raw_line); return SYNTAX; } + + + + + +<encoding_content>"@conv" { return CONV; } + + + + +<encoding_content>"{" { + read_block(temp); + yylvalp->cstring = temp; return RAW_BLOCK; + } + + + + + + + +<encoding_content>"@hooks" { return HOOKS; } + +<encoding_content>"@rules" { return RULES; } + + +%% |