下载 >  开发技术 >  C++ > 烟台大学编译原理课词法分析程序和报告
5

烟台大学编译原理课词法分析程序和报告

这是烟大孔繁茹老师所教授的编译原理实验课上所要求的实验。有代码和详细的实验报告。代码每句都有解释功能较全。可从文件中读出语句进行语法分析并输出到文件中。本人小白代码若有不足还请谅解。
2011-11-17 上传大小:3.77MB
分享
收藏 举报

评论 共1条

ayi_5788 我也是这位老师手下的。很有用。老师真心不错啊。
2014-04-28
回复
烟台大学期末考试题

1.请说出三种预防死锁的方法,并解释。 2.什么是系统功能调用?系统调用和一般用户调用有什么区别? 3.试说明分页系统中,由逻辑地址到物理地址的变化过程。 4.试说明I/O控制的种类,及其优缺点。 5.一个文件系统的物理结构是顺序结构,其在逻辑上是否可以实现索引结构, 如何实现? 四、综合题(每题15分,共90分, 要求写出解题步骤) 1.如图1所示, 方框表示资源类别,小方框表示同种资源, 圆形表示进程, 从资源指向进程的箭头表示该资源被进程拥有,从进程指向资源的箭头表示进程申请该类资源。如对P1进程,P1进程拥有r1和r2类资源各一个并申请另一个r2类资源。在下图情况下会不会产生死锁。为什么?如果P4再申请r1资源会不会死

立即下载
烟台大学的数据结构试题及答案

烟台大学20 03 ~20 04 学年第二学期 烟台大学2006~2007学年第 1 学期

立即下载
烟台大学VB资料课件

烟台大学VB烟台大学VB烟台大学VB烟台大学VB烟台大学VB烟台大学VB烟台大学VB烟台大学VB烟台大学VB烟台大学VB

立即下载
烟台大学历年数据结构考试试题

收录了最近几年烟大计算机学院算法与数据结构考试试题

立即下载
编译原理 词法分析程序 JAVA

编译原理 词法分析程序 JAVA 构造识别单词集的自动机,编写程序实现。 五、实验的处理单词集 (注:单词种类统一分类如下:) 单词符号 单词种类 任意变量名(以字母开头由字母和数字组成的符号串) 0 ( 1 ) 2 { 3 } 4 ; 5 = 6 + 7 * 8 > 9 < 10 , 11 ‘ 12 整型常数(由数字组成的符号串) 30 main 26 int 21 if 22 then 23 else 24 return 25 其它 100 六、处理程序例和处理结果例 例1:源程序: main() { y=x-1; } 处理结果: (26,"main") (1,"(") (2,")") (3,"{") (0,"y") (6,"=") (0,"x") (100,"-") (20,"1") (5,";") (4,")") 例2:源程序 main() { int a,b; b!=a-1; } 处理结果: (26,"main") (1,"(") (2,")") (3,"{" } (21,”int”) (0,"a") (11,",") (0,"b") (5,”;”) (0,"b") (100,"! ") (6,"=") (0,"a") (100,"-") (30,"1") (5,”;”) (4,”)”)

立即下载
java实现简单的编译原理词法语法语义分析程序

一个一遍扫描的词法语法语义分析程序,将部分C语言的语法成分翻译成三地址代码,要求有一定的出错提示和错误恢复功能

立即下载
编译原理第2版test语言 词法语法语义分析源程序

编译原理第2版 清华大学出版社 test语言 词法语法语义分析源程序

立即下载
编译原理综合性实验 选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序

华南农业大学 编译原理 综合性实验报告 选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序。

立即下载
编译原理词法分析简单程序java

编译原理词法分析简单程序java,采用的是五种分法,简单易解,适合刚学java但又想写词法分析的学生使用

立即下载
烟台大学数据结构实验

烟台大学数据结构实验烟台大学数据结构实验烟台大学数据结构实验 武秀川

立即下载
烟台大学文经学院数据结构历年考试题

算法与数据结构。烟台大学文经学院的历年考试题

立即下载
编译原理实验报告 词法分析器实验报告

设计思想 (1)程序主体结构部分: 说明部分 %% 规则部分 %% 辅助程序部分 (2)主体结构的说明 在这里说明部分告诉我们使用的LETTER,DIGIT, IDENT(标识符,通常定义为字母开头的字母数字串)和STR(字符串常量,通常定义为双引号括起来的一串字符)是什么意思.这部分也可以包含一些初始化代码.例如用#include来使用标准的头文件和前向说明(forward ,references).这些代码应该再标记"%{"和"%}"之间;规则部分>可以包括任何你想用来分析的代码;我们这里包括了忽略所有注释中字符的功能,传送ID名称和字符串常量内容到主调函数和main函数的功能. (3)实现原理 程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码形式的编码,用以区分之。 PL/0语言的EBNF表示 <常量定义>::=<标识符>=<无符号整数>; <标识符>::=<字母>={<字母>|<数字>}; <加法运算符>::=+|- <乘法运算符>::=*|/ <关系运算符>::==|#|<|<=|>|>= <字母>::=a|b|…|X|Y|Z <数字>::=0|1|2|…|8|9 三:设计过程 1. 关键字:void,main,if,then,break,int,Char,float,include,for,while,printfscanf 并为小写。 2."+”;”-”;”*”;”/”;”:=“;”:”;”<“;”<=“;”>“;”>=“;”<>“;”=“;”(“;”)”;”;”;”#”为运算符。 3. 其他标记 如字符串,表示以字母开头的标识符。 4. 空格符跳过。 5. 各符号对应种别码 关键字分别对应1-13 运算符分别对应401-418,501-513。 字符串对应100 常量对应200 结束符# 四:举例说明 目标:实现对常量的判别 代码: digit [0-9] letter [A-Za-z] other_char [!-@\[-~] id ({letter}|[_])({letter}|{digit}|[_])* string {({letter}|{digit}|{other_char})+} int_num {digit}+ %% [ |\t|\n]+ "auto"|"double"|"int"|"struct"|"break"|"else"|"long"|"switch"|"case"|"enum"|"register"|"typedef"|"char"|"extern"|"return"|"union"|"const"|"float"|"short"|"unsigned"|"continue"|"for"|"signed"|"void"|"default"|"goto"|"sizeof"|"do"|"if"|"static"|"while"|"main" {Upper(yytext,yyleng);printf("%s,NULL\n",yytext);} \"([!-~])*\" {printf("CONST_string,%s\n",yytext);} -?{int_num}[.]{int_num}?([E][+|-]?{int_num})? {printf("CONST_real,%s\n",yytext);} "0x"?{int_num} {printf("CONST_int,%s\n",yytext);} ","|";"|"("|")"|"{"|"}"|"["|"]"|"->"|"."|"!"|"~"|"++"|"--"|"*"|"&"|"sizeof"|"/"|"%"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"&"|"^"|"|"|"&"|"||"|"+="|"-="|"*="|"/="|"%="|">>="|"<<="|"&="|"^="|"|="|"=" {printf("%s,NULL\n",yytext);} {id} {printf("ID,%s\n",yytext);} {digit}({letter})+ {printf("error1:%s\n",yytext);} %% #include <ctype.h> Upper(char *s,int l) { int i; for(i=0;i<l;i++) { s[i]=toupper(s[i]); } } yywrap() { return 1; } 五:DFA 六:数据测试 七:心得体会 其实匹配并不困难,主要是C++知识要求相对较高,只要把握住指针就好了。 附源程序: #include<iostream.h> #include<stdio.h> #include<stdlib.h> #include<string.h> int i,j,k,flag,number,status; /*status which is use to judge the string is keywords or not!*/ char ch; char words[10] = {" "}; char program[500]; int Scan(char program[]) { char *keywords[13] = {"void","main","if","then","break","int", "char","float","include","for","while","printf", "scanf"}; number = 0; status = 0; j = 0; ch = program[i++]; /* To handle the lettle space ands tab*/ /*handle letters*/ if ((ch >= 'a') && (ch <= 'z' )) { while ((ch >= 'a') && (ch <= 'z' )) { words[j++]=ch; ch=program[i++]; } i--; words[j++] = '\0'; for (k = 0; k < 13; k++) if (strcmp (words,keywords[k]) == 0) switch(k) { case 0:{ flag = 1; status = 1; break; } case 1:{ flag = 2; status = 1; break; } case 2:{ flag = 3; status = 1; break; } case 3:{ flag = 4; status = 1; break; } case 4:{ flag = 5; status = 1; break; } case 5:{ flag = 6; status = 1; break; } case 6:{ flag = 7; status = 1; break; } case 7:{ flag = 8; status = 1; break; } case 8:{ flag = 9; status = 1; break; } case 9:{ flag = 10; status = 1; break; } case 10:{ flag = 11; status = 1; break; } case 11:{ flag = 12; status = 1; break; } case 12:{ flag = 13; status = 1; break; } } if (status == 0) { flag = 100; } } /*handle digits*/ else if ((ch >= '0') && (ch <= '9')) { number = 0; while ((ch >= '0' ) && (ch <= '9' )) { number = number*10+(ch-'0'); ch = program[i++]; } flag = 200; i--; } /*opereation and edge handle*/ else switch (ch) { case '=':{ if (ch == '=') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 401; } else { i--; flag = 402; } break; } case'>':{ if (ch == '>') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 403; } else { i--; flag = 404; } break; } case'<':{ if (ch == '<') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 405; } else { i--; flag = 406; } break; } case'!':{ if (ch == '!') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 407; } else { i--; flag = 408; } break; } case'+':{ if (ch == '+') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 409; } else if (ch == '+') { words[j++] = ch; words[j] = '\0'; flag = 410; } else { i--; flag = 411; } break; } case'-':{ if (ch == '-') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 412; } else if( ch == '-') { words[j++] = ch; words[j] = '\0'; flag = 413; } else { i--; flag = 414; } break; } case'*':{ if (ch == '*') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 415; } else { i--; flag = 416; } break; } case'/':{ if (ch == '/') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 417; } else { i--; flag = 418; } break; } case';':{ words[j] = ch; words[j+1] = '\0'; flag = 501; break; } case'(':{ words[j] = ch; words[j+1] = '\0'; flag = 502; break; } case')':{ words[j] = ch; words[j+1] = '\0'; flag = 503; break; } case'[':{ words[j] = ch; words[j+1] = '\0'; flag = 504; break; } case']':{ words[j] = ch; words[j+1] = '\0'; flag = 505; break; } case'{':{ words[j] = ch; words[j+1] = '\0'; flag = 506; break; } case'}':{ words[j] = ch; words[j+1] = '\0'; flag = 507; break; } case':':{ words[j] = ch; words[j+1] = '\0'; flag = 508; break; } case'"':{ words[j] = ch; words[j+1] = '\0'; flag = 509; break; } case'%':{ if (ch == '%') words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=') { words[j++] = ch; words[j] = '\0'; flag = 510; } else { i--; flag = 511; } break; } case',':{ words[j] = ch; words[j+1] = '\0'; flag = 512; break; } case'#':{ words[j] = ch; words[j+1] = '\0'; flag = 513; break; } case'@':{ words[j] = '#'; flag = 0; break; } default:{ flag = -1; break; } } return flag; } main() { i=0; printf("please input a program end with @"); do { ch = getchar(); program[i++] = ch; }while(ch != '@'); i = 0; do{ flag = Scan(program); if (flag == 200) { printf("(%2d,%4d)",flag,number); } else if (flag == -1) { printf("(%d,error)",flag); } else { printf("(%2d,%4s)",flag,words); } }while (flag != 0); system("pause"); }

立即下载
编译原理词法分析源码语法分析源码java

编译原理词法分析源码语法分析源码java,词法分析和语法分析是分开的,其中语法分析有可视化界面

立即下载
统考大学英语B试题0603.doc

统考大学英语B试题0603.doc

立即下载
烟台大学java课件

烟台大学java课件烟台大学java课件

立即下载
编译原理词法分析程序C语言编写

编译原理词法分析程序C语言编写,很久以前的了,应该好用的

立即下载
编译原理程序小集(正则表达式 NFA DFA MFA 词法分析 语义分析)

上编译原理课的时候做的几个小程序,包含一个简单的词法分析程序、正则表达式-NFA-DFA-MFA转换程序、表达式求值语义分析程序,其中正则表达式-NFA-DFA-MFA重点写的,花了不少心思,写得不是特别满意,今后会重新上传写得更好的。

立即下载
编译原理实验一-词法分析程序-Java

Java写的C语言词法分析程序。可从.c源文件中识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)

立即下载
湘潭大学编译原理试卷

湘潭大学编译原理实验..

立即下载
编译原理词法、语法、语义分析实验报告+源代码)

完整的词法、语法、语义程序源代码+实验报告(实现过程),参照蒋立源的《编译原理》

立即下载
关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
点击完成任务获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
img

烟台大学编译原理课词法分析程序和报告

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验,不建议使用迅雷下载
VIP下载
您今日下载次数已达上限(为了良好下载体验及使用,每位用户24小时之内最多可下载20个资源)

积分不足!

资源所需积分/C币 当前拥有积分
您可以选择
开通VIP
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
为了良好体验,不建议使用迅雷下载
确认下载
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
为了良好体验,不建议使用迅雷下载
VIP和C币套餐优惠
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
确认下载
下载
您还未下载过该资源
无法举报自己的资源

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可返还被扣除的积分

  • 举报人:
  • 被举报人:
  • *类型:
    • *投诉人姓名:
    • *投诉人联系方式:
    • *版权证明:
  • *详细原因: