Kai*_*Kai 4 c token keyword lexer
我目前正在编写我自己的词法分析器(最终是一个解析器),到目前为止一切正常。我能够识别我需要的一切,只是最近我遇到了一个小问题。当我输入诸如“字符”之类的标识符时,词法分析器会输出一个 token[ KEYWORD, "char" ]和另一个 token [ IDENTIFIER, "acter" ]。我目前对输入进行词法分析的方式是在标识符之前查找关键字,以便像 一样int对关键字和标识符都有效的东西首先分配给关键字。但是当标识符在开头包含关键字时,它会将 分成ID两部分,一部分用于关键字,第二部分用于ID. 我需要它作为IDENTIFIER. 如果需要任何代码,我很乐意发布。
编辑:这是语法(还没有解析规则) 注意:它被缩短,只是为了保持重点:我的关键字在标识符之前,它们具有优先权。
关键词:“如果” | "其他" | "同时" | "为" | “假” | “真实” | “打破” | "返回" | "int" | “浮动” | "字符" | “字符串” | "布尔" | “空” | “空值”;
标识符:[a-zA-Z_][a-zA-Z0-9_]*;
INT_LITERAL: [0-9]+;
FLOAT_LITERAL: [0-9]+ '.' [0-9]+
小智 6
我假设关键字是标识符的子集。
您不应该依赖词法分析器来查找关键字。相反,您的词法分析器应该贪婪地只查找标识符,即它应该匹配构成标识符的最长字符序列。
当它找到一个时,您应该检查自己的标识符文本是否是关键字之一。如果是,则返回 KEYWORD 标记,否则返回 IDENTIFIER 标记。