如何区分标识符和字符串?

时间:2014-04-02 07:08:32

标签: bison lex

我有similar question,但有一点差别。我想解析下面的模式:

ID = STRING

注意STRING没有报价。 ID和STRING之间的区别是ID只能以char和下划线开头,STRING没有这样的约束。哪里有区分标识符和字符串,flex或bison的更好的地方?

2 个答案:

答案 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方面。