Mon, 01 Sep 2025 00:14:59 +0800
Initial Lexer/Parser
%{ #include <string.h> #include <stdlib.h> #include "tlvast.h" #include "tlvc.tab.h" %} %option noyywrap %option yylineno %% "message" { return MESSAGE; } "u8" { yylval.num = TLV_TYPE_U8; return TYPE; } "u16" { yylval.num = TLV_TYPE_U16; return TYPE; } "u32" { yylval.num = TLV_TYPE_U32; return TYPE; } "u64" { yylval.num = TLV_TYPE_U64; return TYPE; } "STRING" { yylval.num = TLV_TYPE_STRING; return TYPE; } 0x[0-9a-fA-F]+ { yylval.num = (int)strtol(yytext,NULL,16); return NUMBER; } [a-zA-Z_][a-zA-Z0-9_]* { yylval.str = strdup(yytext); return IDENT; } [ \t\r\n]+ ; // skip whitespace "{" { return '{'; } "}" { return '}'; } ";" { return ';'; } . { fprintf(stderr,"Unexpected char: %c\n", yytext[0]); } %%