Parsing 词法分析器

Parsing 词法分析器,parsing,lexer,Parsing,Lexer,我将构建一个lexer和一个解析器。 我的问题是如何构建它们。我可以想到两种实现: Lexer将把整个输入字符串转换成一个令牌数组。然后解析器将只调用这个数组 同时进行词汇分析和句法分析。在解析时,解析器将调用nextToken的lexer 哪种实现更好 两者都是可行的#1更易于调试,因为您可以保存阵列并一次查看所有阵列#2提供了更高的性能,因为它是一种单程策略,具有潜在的O(1)存储复杂性 如果你不确定该做什么,最好还是坚持第二条 用令牌迭代器编写解析器,并在令牌迭代器的操作符++中实现词法分

我将构建一个lexer和一个解析器。 我的问题是如何构建它们。我可以想到两种实现:

  • Lexer将把整个输入字符串转换成一个令牌数组。然后解析器将只调用这个数组
  • 同时进行词汇分析和句法分析。在解析时,解析器将调用nextToken的lexer
  • 哪种实现更好

    两者都是可行的#1更易于调试,因为您可以保存阵列并一次查看所有阵列#2提供了更高的性能,因为它是一种单程策略,具有潜在的O(1)存储复杂性

    如果你不确定该做什么,最好还是坚持第二条


    用令牌迭代器编写解析器,并在令牌迭代器的操作符++中实现词法分析。这就是Boost.Spirit的方法。另外,如果你的词法分析足够简单,你可以使用Boost.Tokenizer(或者在它周围加上一点逻辑)。

    那么你更喜欢哪种方法?@newbie I prefer#2;我已经编写了一个单通C++预处理器。一次执行多个传统的传球并不能使事情变得更容易。这不是一个C++问题。而Boost精神并不友好,除非你都是一个高级C++用户,熟悉解析理论。@ PATATOSWATER是真的,但是这里的观点是用正向迭代器来实现它,不是所有语法都可以按照<代码> NestTooge< /Cuff>函数实现。