1

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

  1. Lexer 会将整个输入字符串转换为标记数组。然后解析器将调用这个数组。
  2. 同时进行词法分析和解析。解析时,解析器将调用下一个令牌的词法分析器。

哪个实现更好?

4

2 回答 2

1

2号。

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

于 2013-09-23T12:57:14.877 回答
1

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

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

于 2013-09-23T12:46:26.763 回答