Parsing 使用Flex/Bison解析下划线分隔的值
我想解析一些输入,主要是数字,为了用户可读性,可以使用下划线(3;)分隔这些输入 前Parsing 使用Flex/Bison解析下划线分隔的值,parsing,bison,yacc,lex,flex-lexer,Parsing,Bison,Yacc,Lex,Flex Lexer,我想解析一些输入,主要是数字,为了用户可读性,可以使用下划线(3;)分隔这些输入 前 1_0001_000->1000100 000\u 000\u 111->000000 111 我将如何设置我的flex/yacc来做到这一点?这里有一个可能的flex答案(在C中): 数字[0-9] %% {DIGIT}+(“{DIGIT}+*{int numUnderscores=0; 对于(int i=0;i
- 1_0001_000->1000100
- 000\u 000\u 111->000000 111
我将如何设置我的flex/yacc来做到这一点?这里有一个可能的flex答案(在C中):
数字[0-9]
%%
{DIGIT}+(“{DIGIT}+*{int numUnderscores=0;
对于(int i=0;i
- 如果知道数字的最大大小,可以使用静态大小的数组,而不是动态为字符串分配空间
- 如前所述,flex并不是解决此问题的最有效工具。如果这个问题是更大问题的一部分(比如语言语法),那么继续使用flex。否则,有许多更有效的方法来处理这个问题
DIGIT [0-9]
%%
{DIGIT}+("_"{DIGIT}+)* { int number = 0;
for(int i = 0; i < yyleng; i++)
if(yytext[i] != '_')
number = (number*10) + (yytext[i]-'0');
return number;
}
数字[0-9]
%%
{DIGIT}+(“{DIGIT}+*{int number=0;
对于(int i=0;i
只是要确保检查溢出 你不需要bison或yacc,或者flex。一个简单的正则表达式就可以做到这一点。
DIGIT [0-9]
%%
{DIGIT}+("_"{DIGIT}+)* { int number = 0;
for(int i = 0; i < yyleng; i++)
if(yytext[i] != '_')
number = (number*10) + (yytext[i]-'0');
return number;
}