我正在制作一个词法分析器,不要告诉我不要这样做,因为我已经做了大部分。
目前它制作了一系列令牌,仅此而已。
我想知道词法分析器需要提供哪些功能以及每个功能需要做什么的简要说明。
我会接受最完整的清单。
一个示例函数是:
next : 消耗当前token并返回
另外,词法分析器应该具有该expect功能还是解释器应该实现它?
顺便说一句,词法分析器构造函数接受一个字符串作为参数,并进行词法分析并将所有标记存储在“tokens”变量中。
该语言是javascript,所以我不能重载运算符。
根据我的经验,你需要:
nextToken— 在输入中向前移动并获取下一个标记。curToken— 返回当前令牌;别动curValue— 像 STRING 和 NUMBER 这样的标记具有值;像分号这样的标记不会sourcePos— 返回当前标记的第一个字符的源位置(行号、字符位置)编辑——哦还有:
prefetch— 通过获取第一个标记来初始化词法分析器。此外,对于某些语言,您可能需要 2 个或更多的先行标记。然后您需要对 plain 进行变体curToken,以便您可以在令牌流上查看更大的“窗口”。然而,对于大多数语言来说,这并不是真正必要的。
再次编辑——我也不会告诉你不要写一个,因为它们基本上是有史以来最有趣的东西。在 javascript 中你不能太疯狂,但在像 Erlang 这样的语言中,你可以让你的词法分析器像一个“令牌泵”一样工作,让它生成一个令牌流,发送到一个单独的解析器进程。