flex 如何处理模棱两可的模式

How flex handle ambiguous patterns

我想使用 flex 来处理模式。在这种情况下,常量和函数名称都是以大写字母开头的字母字符串。 例如,在 Mother(Liz, Bob),如何区分MotherLiz? 我希望 ( 是一个单一的标记,所以我不能将 Mother( 视为一种模式。

通常情况下,没有必要为不同种类的标识符生成不同的令牌类型。如果可以在句法上区分不同的用途,则解析器不需要这种区分。 (如果您需要语义信息来区分,而如果没有该信息,一个句子可能会模棱两可,那么您可能需要语义反馈,但这里似乎不是这种情况。)

如果您没有解析器,则需要进行一些句法分析。例如,函数名称总是 后跟 ( —— 这意味着您的语言不允许高阶函数。然后你可以围绕 yylex 编写一个包装器,它提前读取一个标记并发出 FUNCTION_NAMECONSTANT_NAME,具体取决于以下标记。