我需要在flex中找到除少数(例如“car”,“bus”,“train”)之外的所有单词。你有什么想法怎么做吗?
答案 0 :(得分:0)
这已经有一段时间没有得到答复,并且是lex / flex的新用户在启动时遇到的标准问题。在其他地方也没有明确的答案。
问题是询问如何匹配非保留字的所有标识符。这是几乎每个编译器都会出现的标准计算机语言功能。它只是没有以明确的方式表达。在编译器构造中,使用flex,我们必须找到除少数之外的所有单词(也称为标识符)(例如“if”,“then”,“else”)。这是通过将词汇模式放入规范中的顺序来实现的。 Wikipedia page on Flex中的主要示例显示了这一点很常见!
我们会这样做:
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中。
这种情况也发生在语言的其他地方。例如,符号“=”,“> =”,“>”,“==”,“++”,“+”,“+ =”等。我们还必须小心我们定义的顺序他们的弯曲词汇确保没有错误。