gpt4 book ai didi

c++ lex和bison对自制标记器/解析器的优势是什么

转载 作者:可可西里 更新时间:2023-11-01 18:11:48 31 4
gpt4 key购买 nike

出于学习目的,我想在 C++ 中进行一些解析和标记化。现在,在网上阅读有关此主题的内容时,我经常会遇到 bison/yacc 和 lex。使用这些比使用 STL 或 boost::regex 或什至只是 C 编写的标记器/解析器有任何主要好处吗?

最佳答案

我最近着手编写一个简单的词法分析器和解析器。

事实证明,词法分析器更易于手动编码。但是解析器有点困难。我的 Bison 生成的解析器几乎立即就可以工作,它给了我很多有用的信息,告诉我在哪里忘记了状态。后来我手动编写了相同的解析器,但在我让它完美运行之前进行了更多的调试。

为词法分析器和解析器生成工具的吸引力在于,您可以用一种干净、易于阅读的语言来编写规范,这种语言接近规范的最短版本。手写的解析器通常至少是它的两倍大。此外,自动解析器 (/lexer) 带有大量诊断代码和逻辑,可帮助您调试事物。

如果您的语言或要求发生变化,类 BNF 语言的解析器/词法分析器规范也更容易更改。如果您正在处理手写的解析器/词法分析器,您可能需要深入挖掘您的代码并进行重大更改。

最后,因为它们通常被实现为没有回溯的有限状态机(Bison 上有无数的选项,所以这并不总是给定的),您的自动生成的代码很可能比您手动生成的代码更高效编码产品。

关于c++ lex和bison对自制标记器/解析器的优势是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238344/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com