0

我正在为一种简单的语言编写编译器。

我制作了一个词法分析器/标记器,它接受一个文件并将标记打印在stdout.

现在我想进行句法分析,但我不知道如何修改我的词法分析器以便将标记作为输入。

  • 链表对于大文件效率极低(大约 80MB 的源文件需要大约 1.3GB 的内存)
  • 我可以修改我的词法分析器以在每次调用它时给出下一个标记(想法取自 Dragon Book),但我不知道如果在过程中的某个地方我必须返回并读取以前的标记我会做什么。

做这些事情的正确方法是什么?

4

2 回答 2

1

在词法分析器中实现nextToken()方法是标准方法。解析器(或语法分析器)调用此方法,直到使用完整个输入。

但是如果在过程中的某个地方我必须返回并阅读以前的令牌,我不会做什么

通常情况并非如此。但是,解析器可能需要做的是“推回”已经看到的令牌(或多个令牌,取决于解析器的前瞻)。在这种情况下,词法分析器提供了一个pushBack(Token)确保下一次调用nextToken()将返回提供的标记,而不是出现在输入中的下一个标记。

于 2011-03-27T17:52:23.103 回答
0

但是如果在过程中的某个地方我必须返回并阅读以前的令牌,我不会做什么

听起来你的比赛太贪心了。

您可能会研究回溯

于 2011-03-27T10:29:06.937 回答