使用flex对tiny语言进行词法分析

flex的使用方法在这里就不一一说明了,网上很多,这次是编译原理的第一个作业,因为最近学得东西比较多,所以偷懒使用flex进行词法分析。

下面是tiny语言代码

{ sample progarm
  in tiny language - 
  computer factorial
}
read x;{ input an integer }
if x < 0 then { don't compute if x <= 0}
	fact := 1;
	repeat
		fact := fact * x;
		x := x - 1
	until x = 0;
	write fact {output factorial of x}
end

就是要使用flex来对上面这段代码进行词法分析,分出哪些是关键字 哪些是运算符等等

首先需要些的是.l文件,这个是flex进行操作的文件

在其中最重要的两个部分 一个就是正则表达式的书写,一个就是识别出来后的操作

下面是demo.l文件的代码

%{
#include "stdio.h"
int lineNum;
%}
digit [0-9]+
keyword read|if|then|repeat|until|write|end
letter [a-zA-Z]+
comment \{[^\}]*\}
operator ":="|"="|"+"|"-"|"*"|"/"|">"|"<"
ignore  [","|";"|" "|\t|\n]+
%%
{comment} { printf("%s : comment\n",yytext);
}
{digit} { printf("%s : digit\n",yytext);
}
{keyword} { printf("%s : keyword\n",yytext);
}
{letter} { printf("%s : letter\n",yytext);
}
{operator} { printf("%s : operator\n",yytext);
}
{ignore} {
	/*nothing*/
}
%%
int yywrap()
{
	return 1;
}

void main()
{
	lineNum = 0;
	yylex();
	return 0;
}

都是比较简单的正则表达式

接下来只需要用 flex demo.l命令 即可将demo.l文件编译成一个c文件,然后将这个c文件编译运行后,即可得到一个exe文件,就用这个文件来解析tiny语言,下面是解析结果截图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值