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