2011-03-27 74 views
0

我正在编写一个简单语言的编译器。编程一个简单的编译器

我做了一个词法分析器/标记器,它接收一个文件并在stdout中打印标记。

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

  • 链表是对大文件(源文件80MB左右约需RAM的1.3GB)
  • 我可以修改我的词法分析器每次给下一个标记它被称为(理念取自效率极低龙书),但我不知道我会做什么,如果在这个过程中的某个地方我必须回去阅读以前的记号。

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

+1

什么“简单的语言”有80 MB的源文件? :-) – 2011-03-27 12:55:43

+0

那么这是一个很好的问题。这是一种简单的语言,但我想保持整洁,因为这个项目可能会在未来成长。 – faulpin 2011-03-27 13:06:30

回答

0

,但我不如果一个地方在这个过程中,我必须回去看以前的令牌

这听起来像你的比赛都太贪婪,我会做什么。

你可能look into Backtracking

1

实现在词法分析器一个nextToken()方法的标准方式。解析器调用此方法(或语法分析器),直到整个输入被消耗完。

,但我不如果一个地方在这个过程中,我必须回去看以前的令牌

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