Lexer和Parser

时间:2013-09-23 12:43:49

标签: parsing lexer

我要构建词法分析器和解析器。 我的问题是如何构建它们。我可以想到2个实现:

  1. Lexer会将整个输入字符串转换为令牌数组。然后解析器将调用此数组。
  2. 同时进行词法分析和解析。在解析时,解析器将为nextToken调用词法分析器。
  3. 哪种实施更好?

2 个答案:

答案 0 :(得分:1)

两者都是可行的。 #1更适合调试,因为您可以保存数组并一次查看所有数组。 #2提供更高的性能,因为它是单通道策略,可能存在O(1)存储复杂性。

如果您不确定该怎么做,最好坚持使用#1。

答案 1 :(得分:1)

2号。

根据令牌迭代器编写解析器,并在令牌迭代器的operator ++中实现lexing。这是Boost.Spirit的方法。此外,如果你的lexing足够简单,你可以使用Boost.Tokenizer(或围绕它包装一些逻辑)。