我正在为玩具语言编写玩具编译器,我们假设它有JavaScript语法。
假设源文件是:
var val = 123;
我的简单编译器将包含Tokenizer和Parser(暂时)。
Tokenizer是否应返回完整的语言关键字,例如var
或逐字母(v
,a
,r
)?
迟早我必须识别关键词,文字等等,我想知道这种工作的地方在哪里?
答案 0 :(得分:4)
令牌器的整个点是获取您的输入流(字符)并为您提供令牌,您可以将其用于语法分析。
因此,您可以期望tokeniser为您提供以下内容:
T_KEYWORD_VAR
T_VARIABLE(val)
T_KEYWORD_EQUALS
T_INTEGER(123)
T_KEYWORD_SEMICOLON
答案 1 :(得分:3)
标记器通常应该已经返回整个关键字(= 标记)。
这样做没有缺点: 只要您的令牌制定者确定 语言关键字(而不是数字或类似关键字),您为什么要削弱"弱化"这些信息是通过拆分已经成功检测到部分内容的部分;)
更一般地说:不要犹豫让令牌器输出为尽可能大的构建块 - 只要你不再给它们任何意义,这应留给解析器。