2

我正在为玩具语言编写玩具编译器,假设它具有 JavaScript 语法。

假设源文件是:

var val = 123;

我的简单编译器将包含一个 Tokenizer 和一个 Parser(目前)。

Tokenizer 是否应该返回整个语言关键字,例如,var还是逐个字母 ( v, a, r) ?

迟早我将不得不识别关键字,文字等,我想知道这种工作的地方在哪里?

4

2 回答 2

4

标记器的全部意义在于获取您的输入流(字符)并为您提供可用于语法分析的标记。

因此,您会期望标记器为您提供以下内容:

T_KEYWORD_VAR
T_VARIABLE(val)
T_KEYWORD_EQUALS
T_INTEGER(123)
T_KEYWORD_SEMICOLON
于 2013-09-16T09:01:48.077 回答
3

标记器通常应该已经返回整个关键字(= tokens)。

这样做没有任何缺点:一旦您的分词器确定它语言关键字(而不是数字或类似关键字),您为什么要通过将您已经成功检测到的内容分成几部分来“弱化”此信息;)

所以更笼统地说:不要犹豫,让标记器输出尽可能大的构建块——只要你不给它们任何意义,这应该留给解析器。

于 2013-09-16T09:02:10.060 回答