flex 如何处理模棱两可的模式
How flex handle ambiguous patterns
我想使用 flex 来处理模式。在这种情况下,常量和函数名称都是以大写字母开头的字母字符串。
例如,在
Mother(Liz, Bob)
,如何区分Mother
和Liz
?
我希望 (
是一个单一的标记,所以我不能将 Mother(
视为一种模式。
通常情况下,没有必要为不同种类的标识符生成不同的令牌类型。如果可以在句法上区分不同的用途,则解析器不需要这种区分。 (如果您需要语义信息来区分,而如果没有该信息,一个句子可能会模棱两可,那么您可能需要语义反馈,但这里似乎不是这种情况。)
如果您没有解析器,则需要进行一些句法分析。例如,函数名称总是 后跟 (
—— 这意味着您的语言不允许高阶函数。然后你可以围绕 yylex
编写一个包装器,它提前读取一个标记并发出 FUNCTION_NAME
或 CONSTANT_NAME
,具体取决于以下标记。
我想使用 flex 来处理模式。在这种情况下,常量和函数名称都是以大写字母开头的字母字符串。
例如,在
Mother(Liz, Bob)
,如何区分Mother
和Liz
?
我希望 (
是一个单一的标记,所以我不能将 Mother(
视为一种模式。
通常情况下,没有必要为不同种类的标识符生成不同的令牌类型。如果可以在句法上区分不同的用途,则解析器不需要这种区分。 (如果您需要语义信息来区分,而如果没有该信息,一个句子可能会模棱两可,那么您可能需要语义反馈,但这里似乎不是这种情况。)
如果您没有解析器,则需要进行一些句法分析。例如,函数名称总是 后跟 (
—— 这意味着您的语言不允许高阶函数。然后你可以围绕 yylex
编写一个包装器,它提前读取一个标记并发出 FUNCTION_NAME
或 CONSTANT_NAME
,具体取决于以下标记。