我需要在 flex 中找到除少数几个单词(例如“汽车”、“公共汽车”、“火车”)之外的所有单词。你有什么想法吗?
问问题
743 次
1 回答
0
这个问题已经有一段时间没有解决了,这是 lex/flex 的新用户在开始时遇到的标准问题。SO的其他地方也没有明确的答案。
问题是问你如何匹配所有不是保留字的标识符。这是几乎每个编译器中都会出现的标准计算机语言功能。它只是没有以明确的方式表达。在编译器构造中,使用 flex,我们必须找到除少数(例如“if”、“then”、“else”)之外的所有单词(也称为标识符)。这是通过将词汇模式放入规范中的顺序来实现的。这很常见,以至于Flex 的 Wikipedia 页面中的主要示例显示了这一点!
我们会这样做:
car return(CAR);
bus return(BUS);
train return(TRAIN);
[a-z]+ return(WORD);
但是,如果我们以不同的顺序执行此操作,则会出现错误:
[a-z]+ return(WORD);
car return(CAR);
bus return(BUS);
train return(TRAIN);
它会反对“汽车”、“公共汽车”和“火车”的匹配,因为它们已经包含在 WORD 中。
这种情况也出现在其他语言中。以符号“=”、“>=”、“>”、“==”、“++”、“+”、“+=”等符号为例。我们还必须注意定义它们的词位的顺序在 flex 中以确保没有错误。
于 2015-01-23T10:35:20.400 回答