编译原理:使用flex和bison工具实现语法分析树的建立

本文简要介绍了如何利用flex和bison工具进行语法分析树的构建。通过parser.lex进行词法分析,parser.y负责语法分析。在Unix环境中,如果未安装flex和bison,可以通过特定命令进行安装。tree模块包含了树的创建、遍历以及数据结构设计的相关函数。
摘要由CSDN通过智能技术生成

在我的另外两篇文章中介绍了语法分析树建立的Java实现,这次使用flex和bison在Unix环境下完成语法分析树的建立

flex介绍

bison介绍

关于flex和bison的使用和语法在这里就不详细的介绍了。

如果你的Unix环境没有装这两个工具可以使用如下命令进行安装(机器需要连接网)

sudo apt-get install bison
sudo apt-get install flex
按照提示属于“y”即可完成安装

parser.lex

%{
#include "parser.tab.h"
#include "tree.h"
#include <string.h>

int line=1; 
int tempTag;
int getTag(char *);

%}

DIGIT 	[0-9]
LETTER	[A-Za-z]
SPACE	\ |\t
LINE	\n
NUM	{DIGIT}+
ID	{LETTER}({LETTER}|{DIGIT})*


%%

{LINE}	{line++;}
{SPACE}	{}

[=]	{yylval=createLeaf(SET,yytext); return SET;}
[!]	{yylval=createLeaf(NOT,yytext); return NOT;}
[+]	{yylval=createLeaf(ADD,yytext); return ADD;}
[-]	{yylval=createLeaf(SUB,yytext); return SUB;}
[*]	{yylval=createLeaf(MUL,yytext); return MUL;}
[/]	{yylval=createLeaf(DIV,yytext); return DIV;}
[>]	{yylval=createLeaf(GT,yytext); return GT;}
[<]	{yylval=createLeaf(LT,yytext); return LT;}
[>][=]	{yylval=createLeaf(GE,yytext); return GE;}
[<][=]	{yylval=createLeaf(LE,yytext); return LE;}
[=][=]	{yylval=createLeaf(EQ,yytext); return EQ;}
[!][=]	{yylval=createLeaf(NE,yytext); return NE;}
[&][&]	{yylval=createLeaf(AND,yytext); return AND;}
[|][|]	{yylval=createLeaf(OR,yytext); return OR;}

[;]	{yylval=createLeaf(SC,yytext); return SC;}
[(]	{yylval=createLeaf(LP,yytext); return LP;}
[)]	{yylval=createLeaf(RP,yytext); return RP;}
[{]	{yylval=createLeaf(LB,yytext); return LB;}
[}]	{yylval=createLeaf(RB,yytext); return RB;}
\[	{yylval=createLeaf(LSB,yytext); return LSB;}
\]	{yylval=createLeaf(RSB,yytext); return RSB;}

{NUM}	{
		yylval=createLeaf(NUM,yytext); 
		return NUM;
	}
{ID}	{
		tempTag=getTag(yytext); 
		yylval=createLeaf(temp
  • 4
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值