山东理工大学编译原理词法分析实验报告.doc

山东理工大学编译原理词法分析实验报告.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
山东理工大学编译原理词法分析实验报告

实验报告 ——词法分析程序设计 【实验项目】 了解词法分析的主要任务。 2、熟悉编译程序的编制。 【实验要求】 1、构造一个小语言的文法; 2、设计单词的输出形式,单词的种类和值的表示方法; 3、编写词法分析程序cffx.c; 4、生成并输出单词符号表。 【实验内容】 根据某文法,构造一个基本词法分析程序。找出该语言的关键字、标识符、整数以及其他一些特殊符号,给出单词表(内容包括单词种类和值),构造符号表(内容包括name、kind、value和address等)。 【实验步骤】 1. 类C语言子集的文法 G[程序]: 程序→分程序 分程序→程序首部{程序体} 程序首部→program 标识符: 程序体→语句序列 语句序列→语句序列;语句|语句 标识符→字母|标识符字母|标识符数字 语句→定义语句|输入语句|复合语句|输出语句 类型→int | double | llint | lldouble 定义表→标识符|标识符,定义表 定义语句→类型定义表 输入语句→scanf(类型,标识符) 复合语句→赋值语句|循环语句|条件语句 输出语句→printf(类型,标识符) 赋值语句→标识符=表达式 循环语句→for型循环语句|while型循环语句 for型循环语句→for(表达式;表达式;表达式){语句|表达式} while型循环语句→while(表达式){语句|表达式} 条件语句→if(表达式){语句|表达式}else{语句|表达式} 表达式→因式运算符因式|因式运算符; 运算符→=|==|#||=||=|++|--|+|-|*|/|% 因式→(表达式)|标识符|数字|数字数字 字母→a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z 数字→0|1|2|3|4|5|6|7|8|9 2.单词分类 1 、keyword (关键字):program | int | double | llint | lldouble | scanf | printf | for | while | if |else 2 、identification (标识符): a|b|c|…… 3 、digit(数据):0|1|2|3|4|…… 4 、operatorsign (运算符):=|==|#||=||=|+ +|- -|+|-|*|/|% boundarysign(界符):{ } |( )| :| ;| , 词法分析源程序 /**********************头文件**********************/ #include stdio.h #include string.h #include conio.h #include ctype.h /*********************全局变量*********************/ char word[20];/*暂存单词*/ char test[500],*p; int count=1; char Keyword[11][10]={program,int,double,llint,lldouble,scanf,printf,for,while,if,else};//关键字数组 char Operatorsign[14][10]={=,==,#,,=,,=,++,--,+,-,*,/,%};//运算符数组 /*****************函数1:关键字、标识符识别****************/ char alpha() { int i=0,j=0;/*j=0是标识符,j=1是关键字*/ char *opp; while(isalnum(*p))/*检查是字母还是数字,如果是字母返回1,是数字返回2*/ { word[i]=*p; p++;i++; } opp=word; for(i=0;i11;i++)/*把字母与关键字表核对,如果是关键字就设置j=1*/ { if(!(strcmp(opp,Keyword[i])))/*比较两个字符串*/ { printf( %d Keyword %s\n,count,opp); /*识别关键字*/ j=1; } } if(j==0) printf( %d Identification %s\n,count,opp); /*识别标识符*/ p--; /*回退多读进的字符*/ return 0; } /*****************函数2:数据识别******************/ char digit() { int i=0; while(isdigit(*p))/*如

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档