我正在制作词法分析器,不要告诉我不要这样做,因为我已经完成了大部分工作 目前它制作了一系列令牌,就是这样。
我想知道,词法分析器需要提供什么功能,以及每个功能需要做什么的简要说明。
我会接受最完整的清单。
示例函数将是:
下一步:使用当前令牌并将其返回
此外,词法分析者应该具有expect
功能还是解释器应该实现它?
顺便说一句,词法分析器构造函数接受一个字符串作为参数并进行词法分析并将所有标记存储在“tokens”变量中。
语言是javascript,所以我不能重载运算符。
答案 0 :(得分:3)
你应该能够编写一个综合列表,编写一个使用词法分析器的程序,并实现你最终需要的功能。
答案 1 :(得分:3)
根据我的经验,您需要:
nextToken
- 在输入中前进并获取下一个标记。curToken
- 返回当前令牌;不要搬家curValue
- STRING和NUMBER等令牌有值;像SEMICOLON这样的代币sourcePos
- 返回当前令牌第一个字符的来源位置(行号,字符位置)编辑 - 哦,哦:
prefetch
- 通过获取第一个令牌来初始化词法分析器。此外,对于某些语言,您可能需要2个或更多前瞻标记。然后你想要一个普通curToken
的变体,这样你就可以在令牌流上看到一个更大的“窗口”。然而,对于大多数并非真正必要的语言。
再次编辑 - 我也不会告诉你不要写一个,因为它们基本上是最有趣的事情。在javascript中你不能太疯狂,但是在像Erlang这样的语言中,你可以让你的词法分析器像一个“令牌泵”,它会生成一个令牌流,它会发送给一个单独的解析器进程。
答案 2 :(得分:0)
第二次思考你所问的问题:“词法分析者需要提供什么功能”
它“需要”的内容当然取决于你需要什么,而不是它需要什么。如果您解释自己的需求,我们可能会给您更好的帮助。但是,无论如何,这是一个镜头:
一个最小的函数将由一个函数组成,该函数将字符串作为参数并返回字符串列表(如果您想要花哨和延迟,则返回字符串上的迭代器)。这对于许多用例来说已经足够了,因此是词法分析者“需要”的。
更具描述性的对象可以返回比字符串更复杂的对象,包含有关每个标记的更多信息(例如它在原始字符串中的位置),这样您就可以告诉可怜的程序员他的语法错误他应该看的代码)。除了行号之外,您可能会想出很多元数据,但这又取决于您的需求。