基于lex的c语言词法分析器

基于lex的c语言词法分析器

ID:11601327

大小:62.00 KB

页数:4页

时间:2018-07-12

基于lex的c语言词法分析器_第1页
基于lex的c语言词法分析器_第2页
基于lex的c语言词法分析器_第3页
基于lex的c语言词法分析器_第4页
资源描述:

《基于lex的c语言词法分析器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验二C-语言的词法分析器(基于Lex)1.课程设计目标1.构造基于lex的词法分析器,以掌握编译原理的基本理论为基础,理解编译程序的基本结构,熟悉编译各阶段的基本理论和技术,掌握编译程序设计的基本理论和步骤,同时增强编写和调试高级语言源程序的能力,掌握词法分析的基本概念和实现方法,最终能开发出一个可以使用的稳定的面向saas基于lex的词法分析器。2.分析与设计基于ParserGenarator的词法分析器构造方法Lex输入文件由3个部分组成:定义集(definition),规则集(rule)和辅助程序集(auxiliaryroutine)或用户程序集(userroutine)。这

2、三个部分由位于新一行第一列的双百分号分开,因此,Lex输入文件的格式如下{definitions}%%{rules}%%{auxiliaryroutines}而且第一部分用“%{”和“%}”括起来。第一和第三个部分为C语言的代码和函数定义,第二个部分为一些规则。定义正则表达式如下ID=letterletter*NUM=digitdigit*Letter=a

3、…

4、z

5、A

6、…

7、ZDigit=0

8、…

9、9Keyword=else

10、if

11、int

12、return

13、void

14、whileSpecialsymbol=+

15、-

16、*

17、/

18、<

19、<=

20、>

21、>=

22、==

23、!=

24、=

25、;

26、,

27、(

28、)

29、[

30、]

31、{

32、}

33、/*

34、

35、*/Whitespace=“”Enter=在lex中的构造letter[A-Za-z]digit[0-9]id({letter}

36、[_])({letter}

37、{digit}

38、[_])*error_id({digit})+({letter})+num{digit}+whitespace[t]+enter[]+在Lex中的规则定义构造定义识别保留字规则"int"

39、"else"

40、"return"

41、"void"

42、"if"

43、"while"{Upper(yytext,yyleng);printf("%d行",lineno);printf("%sreservedword",yyte

44、xt);}//保留字定义识别数字规则{num}{printf("%d行",lineno);printf("%sNUM",yytext);}//数字定义识别专用符号规则","

45、";"

46、"("

47、")"

48、"{"

49、"}"

50、"*"

51、"/"

52、"+"

53、"-"

54、">"

55、"<"

56、">="

57、"<="

58、"=="

59、"!="

60、"="

61、"/*"

62、"*/"{printf("%d行",lineno);printf("%sspecialsymbol",yytext);}//特殊符号定义识别标识符规则{id}{printf("%d行",lineno);printf("%sID",yytext);}//标识符

63、定义识别错误的字符串规则当开头为数字的后面为字母的字符串时,是错误的标识符。{error_id}{printf("error:%s",yytext);}//以数字开头的字符自动报错定义忽略空格规则{whitespace}{/*skipwhitespace*/}//忽略空格定义忽略回车规则{enter}{lineno++;}//遇到回车自动加行号忽略辅助程序集中包括主函数main()和辅助函数toupper()。3.程序代码实现Lex代码//定义集,包括头文件和变量定义%{#include#include#include#in

64、cludeintlineno=1;//定义行号%}//定义正则表达式letter[A-Za-z]//字母digit[0-9]//数字id({letter}

65、[_])({letter}

66、{digit}

67、[_])*//开头为字母的标识符error_id({digit})+({letter})+//开头为数字的错误标识符num{digit}+//数字集合whitespace[t]+//空格enter[]+//回车//定义识别规则%%//识别保留字"int"

68、"else"

69、"return"

70、"void"

71、"if"

72、"while"{Upper(yytext,yylen

73、g);printf("%d行",lineno);//打印行号printf("%sreservedword",yytext);}//输出保留字//识别数字{num}{printf("%d行",lineno);//打印行号printf("%sNUM",yytext);}//输出数字//识别专用符号","

74、";"

75、"("

76、")"

77、"{"

78、"}"

79、"*"

80、"/"

81、"+"

82、"-"

83、">"

84、"<"

85、">="

86、"<="

87、"=="

88、"!="

89、"="

90、"/*"

91、"*

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。