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

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

ID:950983

大小:64.50 KB

页数:5页

时间:2017-10-06

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

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

1、实验二C-语言的词法分析器(基于Lex)1.课程设计目标自动构造C-语言的的词法分析器,要求能够掌握编译原理的基本理论,,理解编译程序的基本结构,掌握编译各阶段的基本理论和技术,掌握编译程序设计的基本理论和步骤.,增强编写和调试高级语言源程序的能力,掌握词法分析的基本概念和实现方法,熟悉C-语言的各种Token。。2.分析与设计基于ParserGenarator的词法分析器构造方法Lex输入文件由3个部分组成:定义集(definition),规则集(rule)和辅助程序集(auxiliaryroutine)或用户程序集(userrouti

2、ne)。这三个部分由位于新一行第一列的双百分号分开,因此,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);

44、printf("%d行",lineno);printf("%sreservedword",yytext);}//保留字定义识别数字规则{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

63、);}//特殊符号定义识别标识符规则{id}{printf("%d行",lineno);printf("%sID",yytext);}//标识符定义识别错误的字符串规则当开头为数字的后面为字母的字符串时,是错误的标识符。{error_id}{printf("error:%s",yytext);}//以数字开头的字符自动报错定义忽略空格规则{whitespace}{/*skipwhitespace*/}//忽略空格定义忽略回车规则{enter}{lineno++;}//遇到回车自动加行号忽略辅助程序集中包括主函数main()和辅助函

64、数toupper()。3.程序代码实现Lex代码//定义集,包括头文件和变量定义%{#include#include#include#includeintlineno=1;//定义行号%}//定义正则表达式letter[A-Za-z]//字母digit[0-9]//数字id({letter}

65、[_])({letter}

66、{digit}

67、[_])*//开头为字母的标识符error_id({digit})+({letter})+//开头为数字的错误标识符num{dig

68、it}+//数字集合whitespace[t]+//空格enter[]+//回车//定义识别规则%%//识别保留字"int"

69、"else"

70、"return"

71、"void"

72、"if"

73、"while"{Upper(yytext,yyleng);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、"/*"

92、"*/"{printf("%d行",li

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

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

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