什么是野牛,为什么它有用
What is Bison and why is it useful?
我已经编程几年了,顺便看到了Bison
这个名字,但从来没有问过它为什么是,或者为什么可能需要它。Bison如何影响我的编程方式,它能让我的C/C++代码更快吗?
Bison是一个解析器生成器。它以类似于Backus-Naur表示法的方式获取输入,并输出代码以根据该语法解析输入。它使您能够比其他情况下更容易地编写解析器。不必手动完成所有操作,只需指定语法的规则,以及当它与其中一个规则匹配时希望发生什么。
GNU Bison是我所知道的唯一一个与编程相关的Bison。它不会让你的代码更快,而且你可能在生活中永远都不需要它。然而,学习一些编译器理论,甚至自己编写一个简单的编译器,是一种很棒的学习体验,它确实会影响你的编程方式,你对计算机编程的思考方式,以及很多类似的事情。如果你喜欢形式语言和自动机,你就会喜欢编译器理论;如果你不喜欢一般的理论,它可能不适合你。如果你感兴趣的话,有很多关于在Stackoverflow上出书的问题。
哦,偶尔程序员确实需要一些更复杂的解析工作等等,了解解析器生成器是一个巨大的福音,而不是按照天真的方法手工编写所有内容。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 为什么 malloc(0) 在"Inside the C++ Object Model?"中有用
- 什么是野牛,为什么它有用
- 为什么move构造函数既没有声明也没有用clang删除
- 什么是清除和设置用于的位以及为什么有用
- 为什么异常规范不能有用
- C++中有哪些不同类型的指针和引用?为什么它们有用
- 为什么用C++编写的 BRMS 不如 Java 中的 BRMS 有用
- 提升序列化库有用吗?为什么不支持"pointer to pointer"序列化?
- 既然其他可滥用但有用的功能已经标准化了,为什么不#pragma一次呢
- 为什么可选的垃圾收集在C++中有用
- 为什么std::equal_to很有用
- 外来操作符——它们为什么有用?