Mon, 01 Sep 2025 00:14:59 +0800
Initial Lexer/Parser
| 0 | 1 | %{ |
| 2 | #include <string.h> | |
| 3 | #include <stdlib.h> | |
| 4 | #include "tlvast.h" | |
| 5 | #include "tlvc.tab.h" | |
| 6 | %} | |
| 7 | ||
| 8 | %option noyywrap | |
| 9 | %option yylineno | |
| 10 | ||
| 11 | %% | |
| 12 | "message" { return MESSAGE; } | |
| 13 | ||
| 14 | "u8" { yylval.num = TLV_TYPE_U8; return TYPE; } | |
| 15 | "u16" { yylval.num = TLV_TYPE_U16; return TYPE; } | |
| 16 | "u32" { yylval.num = TLV_TYPE_U32; return TYPE; } | |
| 17 | "u64" { yylval.num = TLV_TYPE_U64; return TYPE; } | |
| 18 | ||
| 19 | "STRING" { yylval.num = TLV_TYPE_STRING; return TYPE; } | |
| 20 | ||
| 21 | 0x[0-9a-fA-F]+ { yylval.num = (int)strtol(yytext,NULL,16); return NUMBER; } | |
| 22 | ||
| 23 | [a-zA-Z_][a-zA-Z0-9_]* { yylval.str = strdup(yytext); return IDENT; } | |
| 24 | ||
| 25 | [ \t\r\n]+ ; // skip whitespace | |
| 26 | "{" { return '{'; } | |
| 27 | "}" { return '}'; } | |
| 28 | ";" { return ';'; } | |
| 29 | . { fprintf(stderr,"Unexpected char: %c\n", yytext[0]); } | |
| 30 | %% |