Flex/Bison 示例项目教程

Flex/Bison 示例项目教程

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.lcalc.y

  • calc.l: 这是Flex的配置文件,定义了词法分析器的规则。它包含了词法规则和相应的动作代码。
  • calc.y: 这是Bison的配置文件,定义了语法分析器的规则。它包含了语法规则和相应的语义动作代码。

这些配置文件定义了项目的词法和语法规则,是项目运行的核心部分。通过修改这些文件,你可以自定义项目的词法和语法规则。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值