Flex lexer中无法识别的规则

问题描述 投票:0回答:1

在制作XML解析器的过程中:

正如标题所示,我已经记录了下面的代码中所示的规则,但是flex似乎是[[miss特定的规则。

错误:Cmd Error Img

正在讨论的行是:

{boolean} {yylval.booleanval = strdup(yytext); if(err==1){printf("\t\t\t\t\t\t");}; return BOOLEAN;}```

[当明确声明flex似乎无视它时,对于其他规则,则不会出现此类问题。

弹性代码:

%option noyywrap %option yylineno string [_a-zA-Z][_a-zA-Z0-9]* digit [0-9] integer {digit}+ boolean "True" | "False" text ({string}| )* %% . {printf("%s",yytext);} {boolean} {yylval.booleanval = strdup(yytext); if(err==1){printf("\t\t\t\t\t\t");}; return BOOLEAN;} {integer} {return INT;} {string} {return STRING;} %%

parsing bison flex-lexer
1个回答
1
投票
重新阅读该问题,我认为这是一个术语问题。

rule是

{boolean} {yylval.booleanval = strdup(yytext); if(err==1){printf("\t\t\t\t\t\t");}; return BOOLEAN;}
像所有规则一样,该规则由*模式组成”和一个动作。模式{boolean}仅由宏扩展组成。一旦扩展了宏,由于行中存在空白,该行将不再被视为规则宏的定义,正如我在下面的原始答案中所述:


如错误消息所指示,问题是伸缩文件的第22行中的模式,其中包含boolean的宏扩展名:

boolean "True" | "False"

Flex模式可能不包含无引号的空格,无论是直接输入还是通过宏输入。

如果您坚持使用宏,则可能是:

boolean True|False

尽管没有什么阻止您直接在规则中插入模式:

True|False {yylval.booleanval = strdup(yytext); if(err==1){printf("\t\t\t\t\t\t");}; return BOOLEAN;}

© www.soinside.com 2019 - 2024. All rights reserved.