diff options
Diffstat (limited to 'tools/d2c_tok.l')
-rw-r--r-- | tools/d2c_tok.l | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/tools/d2c_tok.l b/tools/d2c_tok.l index ae4faa3..50a8d8f 100644 --- a/tools/d2c_tok.l +++ b/tools/d2c_tok.l @@ -19,6 +19,7 @@ void free_flex_memory(void) ; %option noyywrap %option nounput %option noinput +%option yylineno %x comments @@ -30,7 +31,7 @@ void free_flex_memory(void) ; %x syntax syntax_int syntax_ext -%x conv_begin conv_content conv_arg +%x conv_begin conv_content conv_arg conv_arg_binval %x rules_begin rules_content rules_cond rules_cond_binval rules_action rules_actin_see @@ -51,7 +52,7 @@ void free_flex_memory(void) ; "@title" { BEGIN(ins_name); return TITLE; } <ins_name>[ ][A-Za-z-]+ { d2c_lval.string = strdup(yytext + 1); BEGIN(try_details); return INS_NAME; } -<try_details>[ ] { BEGIN(ins_details); } +<try_details>[ ,/] { BEGIN(ins_details); } <try_details>[\n] { BEGIN(INITIAL); } <ins_details>[^\n]* { d2c_lval.cstring = yytext; return INS_DETAILS; } @@ -111,12 +112,33 @@ void free_flex_memory(void) ; <conv_content>"}" { BEGIN(encoding_content); } <conv_content>[ \t\n]+ { } -<conv_content>[A-Za-z][A-Za-z0-9]* { d2c_lval.string = strdup(yytext); return NAME; } +<conv_content>[A-Za-z][A-Za-z0-9]* { + if (strcmp(yytext, "NOT") == 0) return NOT; + else + { + d2c_lval.string = strdup(yytext); + return NAME; + } + } <conv_content>"=" { return EQ; } - -<conv_content>"(" { BEGIN(conv_arg); } -<conv_arg>[A-Za-z][A-Za-z0-9]* { d2c_lval.string = strdup(yytext); return ARG; } -<conv_arg>")" { BEGIN(conv_content); } +<conv_content>"(" { BEGIN(conv_arg); return OP; } +<conv_arg>[A-Za-z][A-Za-z0-9]* { + if (strcmp(yytext, "NOT") == 0) return NOT; + else if (strcmp(yytext, "EOR") == 0) return EOR; + else + { + d2c_lval.string = strdup(yytext); + return NAME; + } + } +<conv_arg>[0-9][0-9]* { d2c_lval.integer = atoi(yytext); return NUMBER; } +<conv_arg>"'" { BEGIN(conv_arg_binval); } +<conv_arg_binval>[01][01]* { d2c_lval.string = strdup(yytext); return BINVAL; } +<conv_arg_binval>"'" { BEGIN(conv_arg); } +<conv_arg>"," { return COMMA; } +<conv_arg>":" { return COLON; } +<conv_arg>[ ]+ { } +<conv_arg>")" { BEGIN(conv_content); return CP; } |