当前位置:首页 » 编程软件 » 南邮编译原理实验

南邮编译原理实验

发布时间: 2023-03-08 13:59:40

A. 编译原理 词法分析

C语言词法分析器
#include<iostream>
#include<stdio.h>
#include<string>

using namespace std;

FILE *f; //定义一个文件变量
static int line = 1; //表示光标所在的行数
struct ID{ char *name; int count;}id[100];//用于存放ID号码
static int I = 0; //用于记录ID存放的数量
int Number[100]; //用于存放数字
static int P = 0; //用于记录存放数字的个数
int error[100] = {0}; //用于记录错误所在的行数
static int K = 0; //记录错误次数
void Error(); //记录错误
void loginID(char *); //注册ID号
void loginNumber(int &); //记录数字
void noteLine(char &); //记录光标所在的行数
void print(); //输出分析结果
int same(char *chr); //判断单词是否已经存在

void Error()
{ error[K++] = line; }

void loginID(char *chr) //注册ID号
{
int k = 0;
int h = 0;
for(int i = 0; i < I; i++)
{
if(!strcmp(chr,id.name)) //如果单词已经存在
{
id.count++;
k = 1;
}
}
if(k == 0) //该单词不存在
{
h = I + 1;
//I = h;
id[h].count++;
id[h].name = chr;
//strcpy(id[h].name ,chr);
}

}

void loginNumber(int &nu)
{ Number[P++] = nu; }

void noteLine(char &ch)
{
if ( ch == ' ' )
++line;
}

void print()//输出部分
{
//cout << "关键字以及变量:" << endl;
//for(int i = 0; i < 100; i++)
//cout << i <<" " << id.name << " " << id.count << endl;
cout << "数字:" << endl;
for(int i = 1; i <= P; i++)
cout << i << ": " << Number[i-1] << endl;
if(error[0] != 0)
{
cout << "出现的错误!" << endl;
for(int i = 1; i <= K; i++)
cout << "第" << i << "个错误: " << "第" << error[i-1] << "行" << endl;
}
else cout << "没有错误!" << endl;
}

//文件处理部分
void noblank( char &ch) //跳过空格,回车
{
noteLine(ch);
while(ch == ' ' || ch == ' ')
ch = fgetc(f);
}

void identifier(char name[],char &ch)//字母变量
{

int i;
for(i = 0; i < 20; i++)
name = '';
i = 0;
while (('0'<= ch && ch <= '9')||('a'<= ch&&ch <= 'z')||('A'<= ch&&ch <='Z'))
{
name = ch;
i++;
ch = fgetc(f);
}
loginID(name);
//for(int j = 0; j < i; j++)
//{cout << name[j];}
// cout << ' ';

}

int number(char &ch)//数字
{
int num=0;
while('0'<= ch && ch <= '9')
{
num = num* 10 + (ch-'0');
ch = fgetc(f);
}
if( ('a'<= ch&&ch <= 'z')||('A'<= ch&&ch <='Z'))
{
Error();
}
else if( ch == '.')
{;}
loginNumber(num); //记录数字
return num;
}

void test(char &ch)//符号
{
char str[2]={'0/'};
if(ch == '*')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '.')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ',')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '"')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '/')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '%')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '^')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '-')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '{')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '}')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '[')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ']')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ';')
{str[0] = ch; ch = fgetc(f);}
if(ch == ':')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '?')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '(')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ')')
{str[0] = ch; ch = fgetc(f);}
if(ch =='+')
{

str[0] = ch;
if((ch = fgetc(f)) == '+' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}

//cout << str[0]<< endl;
}
if(ch == '-')
{

str[0] = ch;
if((ch = fgetc(f)) == '-' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}

//cout << str[0]<< endl;
}
if(ch == '&')
{

str[0] = ch;
if((ch = fgetc(f)) == '&' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}

//cout << str[0]<< endl;
}
if(ch == '|')
{

str[0] = ch;
if((ch = fgetc(f)) == '|' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}

//cout << str[0]<< endl;
}
if(ch == '!')
{

str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}

//cout << str[0]<< endl;
}
if(ch == '=')
{

str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}

}
if(ch == '>')
{

str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
else
if(ch == '>' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}

}
if(ch == '<')
{
str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
}
else
if(ch == '<' )
{
str[1] = ch;
ch = fgetc(f);
}

}

}

int main()
{
char ch;
char name[30];
for(int i = 0; i < 30; i++)
name = '/0';
f = fopen("c.txt","r"); //打开指定输入文件
if (f == NULL)
cout<<"文件不存在!"<<endl;
ch = fgetc(f);
while(!feof(f))
{
noblank( ch ); //跳过回车,空格
if( ( ch >= 'a' && ch <= 'z' )||( ch >= 'A' && ch <= 'Z' ))
{ identifier(name,ch); } //处理字母
else if( ch >= '0'&& ch <= '9')
{ number(ch); } //处理数字
else
{ test(ch); } //处理符号
}
print(); //打印词法分析结果
fclose(f); //关闭文件
system("pause");
return 0;
}

B. 编译原理实验二 LL(1)分析法

通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。

根据某一文法编制调试 LL(1)分析程序,以便对任意输入的符号串进行分析。
构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。
分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。

对文法 的句子进行不含回溯的自上向下语法分析的充分必要条件是:
(1)文法不含左递归;
(2)对于文法中的每一个非终结符 的各个产生式的候选首符集两两不相交,即,若

Follow集合构造:
对于文法 的每个非终结符 构造 的算法是,连续使用下面的规则,直至每个 不再增大为止:

仅给出核心部分
(1) GrammerSymbol.java

(2) GrammerSymbols.java

(3) Grammer.java

(4) LL1Grammer.java

C. 编译原理 词法分析程序的设计与实现实验题

说他像苍蝇,是骂苍蝇呢还是骂他呢?

D. 0513《编译原理》作业要求 设计并实现TINYC语言的扫描程序;

你的作业还在不在,能否借我一用,酬谢

E. 南京邮电大学的计算机专业怎么样啊南邮转专业好转吗

计算机在南邮算不错的专业。。。
南邮转专业条件比较苛刻~~所以极其困难~~~
转进通信工程的 大一大二 每年全校才8-9个人~~

随便说说。新生既然专业已订,不要动不动就问可不可以转专业,先好好学完你的大一再说。
说白了,一百个说想转专业的新生中能有一个转成就不错了。
也没必要问自己的专业好不好,即使是学长学姐也回答不了这种问题。

【下面提供你两个资料:转专业细则 和 计算机专业介绍】
---------------------------------------------------------------------------------------------------------------------
一、总 则
第一条 为充分体现“以人为本、以学生为中心”的教学管理理念,不断完善学生自我构建知识结构的管理机制,充分发挥学生的个性、特长,尊重学生的志向和爱好,进一步调动学生的学习积极性、主动性,使学生有更多的自主选择和发展的机会,特制定本规定。
第二条 学校对转专业的年级和学生人数实行宏观控制,原则上允许一、二年级的学生转专业,一年级转专业学生人数控制在全年级总人数的5%以内;二年级控制在3%以内。
第三条 学生提出转专业申请,只限于第二学期和第四学期。每年5月上旬为受理时间,5月中旬为接收院系甄别考试时间,5月下旬进行学校评审,6月上旬公布转专业学生名单。

二、转专业资格
第四条 凡提出申请转专业的学生,应具备下列条件之一:
(一)思想品质与学习成绩优良,智育排名在本专业前10%(含10%)以内;
(二)对所转专业有一定的特长和志向,经学校认可,确有某种特殊困难,不转专业无法继续学习的学生,需满足以下条件之一:
1.从工学电气信息类、理学电子信息科学类专业转入经济学、管理学、教育学、文学学科我校所设专业学习;
2.申请转专业的学生只能从生源省份入学当年录取平均分高的专业转入录取平均分低的专业,当申请转入专业在学生生源省份入学当年没招生时,以江苏省当年相应转入、转出专业录取平均分为依据。
(三)学校因专业调整或停办,保留入学资格并重新办理入学手续的学生或学籍异动的学生,不转专业无法继续学习的,由学校根据实际情况,安排申请者转入有关专业。
第五条 有下列情况之一者,不得申请转专业:
(一)在校期间受到警告(含警告)以上处分者;
(二)在校期间已有一次转专业记录者;
(三)已取消学籍或应予退学者。

三、转专业程序
第六条 各院系根据所在专业毕业生就业情况、师资、实验条件等状况,按照不超过接收专业年级总人数的3%的比例提出能接收外专业转入学生人数并报教务处。
第七条 教务处根据教学条件,确定并统一公布各专业接收转专业人数。
第八条 凡需申请转专业的学生在规定时间内,须向所在院系提出书面申请,填写《南京邮电大学学生转专业申请表》并附家长(或监护人)同意的书面意见,报主管教学院长(系主任)审批,经所在院系同意后,报教务处。
第九条 教务处汇总各院系申请转专业学生名单并进行资格预审,教务处预审同意转专业的学生,参加转入院系组织的考试、考核。
第十条 接收院系要认真组织好申请转专业学生的考核工作,对于符合第四条第一款的学生,考核应采取闭卷笔试的方式,着重考核学生转入专业的基础要求;对于符合第四条第二款的学生,考核应采取闭卷笔试与面试相结合的方式,着重考核学生转入专业的基础要求以及特长表现。接收院系根据考核情况和参考学生当学期期中考试成绩,提出能否接收的意见,并报教务处。
第十一条 教务处根据各院系转专业学生考核情况,提出初审意见,并报校级评审小组(由校监察处、教务处、学工处等部门负责人组成)讨论通过后由主管校长批准,上网公布。
第十二条 经学校同意转专业的学生,由教务处通知学生所在院系和接收院系,学生凭所在院系转专业通知书办理转专业手续。

四、学籍管理与学分记载
第十三条 学校对转专业的学生按照转入专业的培养计划进行学籍管理。
第十四条 学校对转专业学生的学分按下列规定计算:
(一)与转入专业同档或高一档的通识基础课、学科基础课和专业基础课程学分仍然有效。低于转入专业的通识基础课、学科基础课和专业基础课程必须补修。
(二)学生转专业前获得的课程学分与转入专业培养计划无关的,可计算为选修课学分(具体见各专业培养计划)。
五、附 则
第十五条 国防生转专业按照国防生相关管理规定执行。
第十六条 本规定自2008年9月1日起执行,由教务处负责解释。
--------------------------------------------------------------------------------------------------------------------

计算机科学与技术专业
(本科、四年制)
本专业培养具有良好的科学素养和创新能力,系统地掌握计算机科学与技术,包括计算机软件、硬件、计算机通信与应用的基本理论、方法与技能,能从事计算机科学研究和应用或软硬件开发和技术管理的高级专业技术人才。
本专业学生主要学习计算机科学与技术方面的基本理论和基础知识,接受从事研究计算机理论与应用计算机技术的基本训练,具有研究和开发计算机系统的基本能力。本专业的学生按照教学计划修满所规定的学分后,符合南京邮电大学全日制本科毕业学士学位授予条件的将被授予工学学士学位。
主要课程有:高级语言程序设计、电工电子技术基础、数字电路与逻辑设计、离散数学、数据结构、操作系统、计算机组成原理、软件工程、微型计算机接口技术、计算机系统结构、数据库系统、编译原理、通信原理、计算机通信与网络、TCP/IP网络设计与实现、现代通信技术、计算机网络编程技术、算法分析与设计、嵌入式系统开发、网络信息安全等。
本专业继续深造的方向有计算机应用技术、计算机软件与理论、通信与信息系统等。
本专业学生毕业后,可在政府机关、科研部门、企事业单位和高等院校,特别是信息技术领域从事计算机软件、计算机应用、计算机
通信和网络等方面的研究、设计、开发和技术管理等工作。
---------------------------------------------------------------------------------------------------------------------
学弟好~~~

F. 有人知道编译原理实验之词法分析器用C++怎么做吗

#include "globals.h"
#include "util.h"
#include "scan.h"
#include "parse.h"

static TokenType token; /* holds current token */

/* function prototypes for recursive calls */
static TreeNode * stmt_sequence(void);
static TreeNode * statement(void);
static TreeNode * if_stmt(void);
static TreeNode * repeat_stmt(void);
static TreeNode * assign_stmt(void);
static TreeNode * read_stmt(void);
static TreeNode * write_stmt(void);
static TreeNode * exp(void);
static TreeNode * simple_exp(void);
static TreeNode * term(void);
static TreeNode * factor(void);

static void syntaxError(char * message)
{ fprintf(listing,"\n>>> ");
fprintf(listing,"Syntax error at line %d: %s",lineno,message);
Error = TRUE;
}

static void match(TokenType expected)
{ if (token == expected) token = getToken();
else {
syntaxError("unexpected token -> ");
printToken(token,tokenString);
fprintf(listing," ");
}
}

TreeNode * stmt_sequence(void)
{ TreeNode * t = statement();
TreeNode * p = t;
while ((token!=ENDFILE) && (token!=END) &&
(token!=ELSE) && (token!=UNTIL))
{ TreeNode * q;
match(SEMI);
q = statement();
if (q!=NULL) {
if (t==NULL) t = p = q;
else /* now p cannot be NULL either */
{ p->sibling = q;
p = q;
}
}
}
return t;
}

TreeNode * statement(void)
{ TreeNode * t = NULL;
switch (token) {
case IF : t = if_stmt(); break;
case REPEAT : t = repeat_stmt(); break;
case ID : t = assign_stmt(); break;
case READ : t = read_stmt(); break;
case WRITE : t = write_stmt(); break;
default : syntaxError("unexpected token -> ");
printToken(token,tokenString);
token = getToken();
break;
} /* end case */
return t;
}

TreeNode * if_stmt(void)
{ TreeNode * t = newStmtNode(IfK);
match(IF);
if (t!=NULL) t->child[0] = exp();
match(THEN);
if (t!=NULL) t->child[1] = stmt_sequence();
if (token==ELSE) {
match(ELSE);
if (t!=NULL) t->child[2] = stmt_sequence();
}
match(END);
return t;
}

TreeNode * repeat_stmt(void)
{ TreeNode * t = newStmtNode(RepeatK);
match(REPEAT);
if (t!=NULL) t->child[0] = stmt_sequence();
match(UNTIL);
if (t!=NULL) t->child[1] = exp();
return t;
}

TreeNode * assign_stmt(void)
{ TreeNode * t = newStmtNode(AssignK);
if ((t!=NULL) && (token==ID))
t->attr.name = String(tokenString);
match(ID);
match(ASSIGN);
if (t!=NULL) t->child[0] = exp();
return t;
}

TreeNode * read_stmt(void)
{ TreeNode * t = newStmtNode(ReadK);
match(READ);
if ((t!=NULL) && (token==ID))
t->attr.name = String(tokenString);
match(ID);
return t;
}

TreeNode * write_stmt(void)
{ TreeNode * t = newStmtNode(WriteK);
match(WRITE);
if (t!=NULL) t->child[0] = exp();
return t;
}

TreeNode * exp(void)
{ TreeNode * t = simple_exp();
if ((token==LT)||(token==EQ)) {
TreeNode * p = newExpNode(OpK);
if (p!=NULL) {
p->child[0] = t;
p->attr.op = token;
t = p;
}
match(token);
if (t!=NULL)
t->child[1] = simple_exp();
}
return t;
}

TreeNode * simple_exp(void)
{ TreeNode * t = term();
while ((token==PLUS)||(token==MINUS))
{ TreeNode * p = newExpNode(OpK);
if (p!=NULL) {
p->child[0] = t;
p->attr.op = token;
t = p;
match(token);
t->child[1] = term();
}
}
return t;
}

TreeNode * term(void)
{ TreeNode * t = factor();
while ((token==TIMES)||(token==OVER))
{ TreeNode * p = newExpNode(OpK);
if (p!=NULL) {
p->child[0] = t;
p->attr.op = token;
t = p;
match(token);
p->child[1] = factor();
}
}
return t;
}

TreeNode * factor(void)
{ TreeNode * t = NULL;
switch (token) {
case NUM :
t = newExpNode(ConstK);
if ((t!=NULL) && (token==NUM))
t->attr.val = atoi(tokenString);
match(NUM);
break;
case ID :
t = newExpNode(IdK);
if ((t!=NULL) && (token==ID))
t->attr.name = String(tokenString);
match(ID);
break;
case LPAREN :
match(LPAREN);
t = exp();
match(RPAREN);
break;
default:
syntaxError("unexpected token -> ");
printToken(token,tokenString);
token = getToken();
break;
}
return t;
}

/****************************************/
/* the primary function of the parser */
/****************************************/
/* Function parse returns the newly
* constructed syntax tree
*/
TreeNode * parse(void)
{ TreeNode * t;
token = getToken();
t = stmt_sequence();
if (token!=ENDFILE)
syntaxError("Code ends before file\n");
return t;
}
上面是一个语法分析器的主代码部分它可以识别类似下面的代码,但是由于篇幅有限,上面的代码不是完整代码,完整代码太长,还有好几个文件。
read x; { input an integer }
if 0 < x 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

G. 编译原理语法分析实验问题

错误1:在3.txt中,第二个表达式x:=2*3,在编译器里面没有对*符号进行解释,这个应补充,或者改掉*为+。
错误2:代码中出现3次类似syn==15||16的代码,我理解应该是(syn==15)||(syn==16)
改掉这两点后代码可以正常运行。
建议:写代码是一项工作,更是一个创作过程,建议你按照代码写作规范来写,这样的代码清晰易读,易于交流和纠错。

H. 急!有谁知道南京邮电大学计算机专业考研需要考哪些科,有参考书最好!

南京邮电大学计算机学院

081202计算机软件与理论2007 招生目录(本专业招生 52 人)

研究方向
01软件技术及其在通信中的应用
02基于网络的计算机软件应用技术
03网络环境下的软件开发技术
04数据仓库与决策支持系统

初试科目
①101政治理论
②201英语
③301数学一
④413通信系统原理或416微机原理及应用或417数据结构

参考书目
413通信系统原理
《通信原理》(第五版)(前八章为主) 樊昌信等国防工业出版社
416微机原理及应用
《 微型计算机系统原理及应用》周明德主编清华大学出版社
《32位微型计算机原理与接口技术》仇玉章主编清华大学出版社
417数据结构
《数据结构——使用C++语言描述》 陈慧南主编 东南大学出版社
《数据结构-C语言描述》 陈慧南主编 西安电子科技大学出版社
《数据结构》 (pascal语言描述) 严蔚敏,吴伟民编清华大学出版社

复试备注 复试:1编译原理2数据结构(二选一)

081020信息安全2007 招生目录(本专业招生 10 人)

研究方向
01通信系统的信息安全
02计算机通信网与安全
03信息安全理论与技术
04计算机取证技术

初试科目
①101政治理论
②201英语
③301数学一
④413通信系统原理或416微机原理及应用或417数据结构

参考书目
416微机原理及应用
《 微型计算机系统原理及应用》周明德主编清华大学出版社
《32位微型计算机原理与接口技术》仇玉章主编清华大学出版
417数据结构
《数据结构——使用C++语言描述》 陈慧南主编 东南大学出版社
《数据结构-C语言描述》 陈慧南主编 西安电子科技大学出版社
《数据结构》 (pascal语言描述) 严蔚敏,吴伟民编清华大学出版社
413通信系统原理
《通信原理》(第五版)(前八章为主) 樊昌信等国防工业出版社

复试备注 复试:1网络信息安全2密码学3操作系统(三选一)

081201计算机系统结构2007 招生目录(本专业招生 10 人)

研究方向
01嵌入式技术及其在通信中的应用
02智能计算技术方法及其体系结构与应用
03网络体系结构及其在通信中的应用
04并行计算及其体系结构

初试科目
①101政治理论
②201英语
③301数学一
④413通信系统原理或416微机原理及应用或417数据结构

参考书目
416微机原理及应用
《 微型计算机系统原理及应用》周明德主编清华大学出版社
《32位微型计算机原理与接口技术》仇玉章主编清华大学出版
417数据结构
《数据结构——使用C++语言描述》 陈慧南主编 东南大学出版社
《数据结构-C语言描述》 陈慧南主编 西安电子科技大学出版社
《数据结构》 (pascal语言描述) 严蔚敏,吴伟民编清华大学出版社
413通信系统原理
《通信原理》(第五版)(前八章为主) 樊昌信等国防工业出版社

复试备注 复试:1计算机组成原理 2数据结构(二选一)

081203计算机应用技术2007 招生目录(本专业招生 85 人)

研究方向
①101政治理论
②201英语
③301数学一
④413通信系统原理或416微机原理及应用或417数据结构

初试科目
①101政治理论
②201英语
③301数学一
④413通信系统原理或416微机原理及应用或417数据结构

参考书目
416微机原理及应用
《 微型计算机系统原理及应用》周明德主编清华大学出版社
《32位微型计算机原理与接口技术》仇玉章主编清华大学出版
417数据结构
《数据结构——使用C++语言描述》 陈慧南主编 东南大学出版社
《数据结构-C语言描述》 陈慧南主编 西安电子科技大学出版社
《数据结构》 (pascal语言描述) 严蔚敏,吴伟民编清华大学出版社
413通信系统原理
《通信原理》(第五版)(前八章为主) 樊昌信等国防工业出版社

复试备注 复试:1微机原理及应用2数据结构(二选一)

I. 编译原理课程设计-词法分析器设计(C语言)

#include"stdio.h"/*定义I/O库所用的某些宏和变量*/

#include"string.h"/*定义字符串库函数*/

#include"conio.h"/*提供有关屏幕窗口操作函数*/

#include"ctype.h"/*分类函数*/

charprog[80]={''},

token[8];/*存放构成单词符号的字符串*/

charch;

intsyn,/*存放单词字符的种别码*/

n,

sum,/*存放整数型单词*/

m,p;/*p是缓冲区prog的指针,m是token的指针*/

char*rwtab[6]={"begin","if","then","while","do","end"};

voidscaner(){

m=0;

sum=0;

for(n=0;n<8;n++)

token[n]='';

ch=prog[p++];

while(ch=='')

ch=prog[p++];

if(isalpha(ch))/*ch为字母字符*/{

while(isalpha(ch)||isdigit(ch))/*ch为字母字符或者数字字符*/{

token[m++]=ch;

ch=prog[p++];}

token[m++]='';

ch=prog[p--];

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)/*字符串的比较*/{

syn=n+1;

break;}}

else

if(isdigit(ch))/*ch是数字字符*/{

while(isdigit(ch))/*ch是数字字符*/{

sum=sum*10+ch-'0';

ch=prog[p++];}

ch=prog[p--];

syn=11;}

else

switch(ch){

case'<':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='>'){

syn=21;

token[m++]=ch;}

elseif(ch=='='){

syn=22;

token[m++]=ch;}

else{

syn=20;

ch=prog[p--];}

break;

case'>':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=24;

token[m++]=ch;}

else{

syn=23;

ch=prog[p--];}

break;

case':':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=18;

token[m++]=ch;}

else{

syn=17;

ch=prog[p--];}

break;

case'+':syn=13;token[0]=ch;break;

case'-':syn=14;token[0]=ch;break;

case'*':syn=15;token[0]=ch;break;

case'/':syn=16;token[0]=ch;break;

case'=':syn=25;token[0]=ch;break;

case';':syn=26;token[0]=ch;break;

case'(':syn=27;token[0]=ch;break;

case')':syn=28;token[0]=ch;break;

case'#':syn=0;token[0]=ch;break;

default:syn=-1;}}

main()

{

printf(" Thesignificanceofthefigures: "

"1.figures1to6saidKeyword "

"2. "

"3.figures13to28saidOperators ");

p=0;

printf(" pleaseinputstring: ");

do{

ch=getchar();

prog[p++]=ch;

}while(ch!='#');

p=0;

do{

scaner();

switch(syn){

case11:printf("(%d,%d) ",syn,sum);break;

case-1:printf(" ERROR; ");break;

default:printf("(%d,%s) ",syn,token);

}

}while(syn!=0);

getch();

}

程序测试结果

对源程序beginx:=9:ifx>9thenx:=2*x+1/3;end#的源文件,经过词法分析后输出如下图5-1所示:

具体的你在修改修改吧

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:741
制作脚本网站 发布:2025-10-20 08:17:34 浏览:1005
python中的init方法 发布:2025-10-20 08:17:33 浏览:712
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:874
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:773
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1120
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:346
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:224
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:910
python股票数据获取 发布:2025-10-20 07:39:44 浏览:869