我有similar question,但有一点差别。我想解析下面的模式:
ID = STRING
注意STRING没有报价。 ID和STRING之间的区别是ID只能以char和下划线开头,STRING没有这样的约束。哪里有区分标识符和字符串,flex或bison的更好的地方?
答案 0 :(得分:1)
在flex中,如果输入匹配两个模式,则首选模式。所以你可以写,例如:
[[:alpha:]]_[[:alnum:]_]+ { yylval = strdup(yytext); return ID; }
[[:alnum:]_]+ { yylval = strdup(yytext); return STRING; }
并且第一条规则将针对a_97
之类的输入执行(两种模式都匹配),而第二条规则将针对97_a
之类的输入执行(第一种模式不匹配) )。
答案 1 :(得分:1)
以a_97 = a_97
为例。问题是我将获得令牌序列:ID,'=',ID,这是语法规则ID = STRING
无法接受的。我决定将它们视为STRING,并将检查留在Bison方面。