Flex/Bison 示例项目教程
flex-bison-examples 项目地址: https://gitcode.com/gh_mirrors/fl/flex-bison-examples
1. 项目的目录结构及介绍
flex-bison-examples/
├── simple-c/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── simple-cpp/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── reentrant-c/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── reentrant-variant-cpp/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── optional-semicolon/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── python-like-indentation/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── elite2/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── utf-8/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
├── error-recovery/
│ ├── calc.l
│ ├── calc.y
│ ├── Makefile
│ └── README.md
└── error-handling/
├── calc.l
├── calc.y
├── Makefile
└── README.md
目录结构介绍
- simple-c: 最简单的C代码版Flex/Bison示例,使用union和全局函数,初学推荐。
- simple-cpp: 如果你想在C代码基础上使用一点C++,那么推荐你从该示例入手。
- reentrant-c: 可重入版的C代码版,适合普通C工程使用,避免全局变量的使用,便于多线程安全调用。
- reentrant-variant-cpp: C++工程版示例,避免全局变量的使用,并且使用variant替代union,可以在parser中方便地使用各种带构造函数的类型。
- optional-semicolon: 目前效果最好的可选分号实现,目前是基于基础C代码版,只做思路上的实现,实际应用时请根据需要修改裁剪。
- python-like-indentation: 一个类似python的语法,改自optional-semicolon,实现了缩进确定block和可选分号的效果,同时也展示了flex start condition的用法。
- elite2: 一个较完整的语法示例,但没有具体的语义分析部分,设计取自我之前写的elite编程语言第二版。
- utf-8: 使用flex支持utf-8和中文词语法的示例,代码中原生支持中文,或者做游戏引擎时制作脚本引擎,中文支持还是非常有用的。
- error-recovery: 异常恢复的基本操作,使用error关键词来匹配到下一个合法的token,这里展示了其基本用法。
- error-handling: 来自IBM的示例代码,展示如果打印漂亮的错误提示信息,打印错误代码行等等。
2. 项目的启动文件介绍
每个示例项目中都有一个 Makefile
文件,用于编译和构建项目。启动项目时,首先需要进入相应的目录,然后运行 make
命令来编译项目。
例如,在 simple-c
目录下,运行以下命令:
cd simple-c
make
编译完成后,会生成一个可执行文件,通常命名为 calc
。你可以通过运行该可执行文件来启动项目。
3. 项目的配置文件介绍
每个示例项目中都有两个主要的配置文件:calc.l
和 calc.y
。
- calc.l: 这是Flex的配置文件,定义了词法分析器的规则。它包含了词法规则和相应的动作代码。
- calc.y: 这是Bison的配置文件,定义了语法分析器的规则。它包含了语法规则和相应的语义动作代码。
这些配置文件定义了项目的词法和语法规则,是项目运行的核心部分。通过修改这些文件,你可以自定义项目的词法和语法规则。
flex-bison-examples 项目地址: https://gitcode.com/gh_mirrors/fl/flex-bison-examples