之前一直想钻研一下这方面的东西,于是便花了一些精力研究这些相关的工具和技术,现在我把我总结的一些经验分享给大家
Flex & Bison 是比较有名而且易用的parser组合,今后的工作大体都用到了这两个工具。他们可以在gnu官网下载,windows用户要么去下载winflexbison,要么自己编译一份(推荐),这里不详细介绍获取方法
本教程所有代码都在Android平台和windows平台的g++编译通过(可能不支持vs,untested)
Bison则是一个文法分析器(也是unix yacc的gnu克隆),语法就是在这里定义,是语言设计的核心
这两巨头不但可以应付复杂的语法处理,也可以拿来制作简单的分析器,如配置文件等
初探Flex
习惯上,一般把flex input文件命名为xxxll.l
以下是一个简单的例子test1ll.l:
Flex & Bison 是比较有名而且易用的parser组合,今后的工作大体都用到了这两个工具。他们可以在gnu官网下载,windows用户要么去下载winflexbison,要么自己编译一份(推荐),这里不详细介绍获取方法
本教程所有代码都在Android平台和windows平台的g++编译通过(可能不支持vs,untested)
初探 1
什么是Flex和Bison?
Flex是一个词法分析器,是unix lex的gnu克隆,作用是把"词"抽象成符号,供程序识别Bison则是一个文法分析器(也是unix yacc的gnu克隆),语法就是在这里定义,是语言设计的核心
这两巨头不但可以应付复杂的语法处理,也可以拿来制作简单的分析器,如配置文件等
初探Flex
习惯上,一般把flex input文件命名为xxxll.l
以下是一个简单的例子test1ll.l:
%{
#include <iostream>
using namespace std;
%}
%%
[0-9]+ { cout << "Number "; }
[a-zA-Z]+ { cout << "Word "; }
[ \t] ; //忽略空格
%%