词法分析-219范楚广

#include <stdio.h>
#include <string.h>
char prog[80],token[8],ch;
int syn,p,m,n,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
scaner();
main()
{p=0;
printf("\n 请输入一个字符串以#号结束:\n");
do{
scanf("%c",&ch);
prog[p++]=ch;
}while(ch!=‘#‘);
p=0;
do{
scaner();
switch(syn)
{case 11:printf("( %-10d%5d )\n",sum,syn);
break;
case -1:printf("你输入了一个错误的字符串\n");
getch();
exit(0);
default: printf("( %-10s%5d )\n",token,syn);
break;
}
}while(syn!=0);
getch();
}
scaner()
{ sum=0;
for(m=0;m<8;m++)token[m++]=NULL;
ch=prog[p++];
m=0;
while((ch==‘ ‘)||(ch==‘\n‘))ch=prog[p++];
if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))
{ while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))
{token[m++]=ch;
ch=prog[p++];
}
p--;
syn=10;
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0)
{ syn=n+1;
break;
}
}
else if((ch>=‘0‘)&&(ch<=‘9‘))
{ while((ch>=‘0‘)&&(ch<=‘9‘))
{ sum=sum*10+ch-‘0‘;
ch=prog[p++];
}
p--;
syn=11;
}
else switch(ch)
{ case ‘<‘:token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{ syn=22;
token[m++]=ch;
}
else
{ syn=20;
p--;
}
break;
case ‘>‘:token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{ syn=24;
token[m++]=ch;
}
else
{ syn=23;
p--;
}
break;
case ‘+‘: token[m++]=ch;
ch=prog[p++];
if(ch==‘+‘)
{ syn=17;
token[m++]=ch;
}
else
{ syn=13;
p--;
}
break;
case ‘-‘:token[m++]=ch;
ch=prog[p++];
if(ch==‘-‘)
{ syn=29;
token[m++]=ch;
}
else
{ syn=14;
p--;
}
break;
case ‘!‘:ch=prog[p++];
if(ch==‘=‘)
{ syn=21;
token[m++]=ch;
}
else
{ syn=31;

p--;
}
break;
case ‘=‘:token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{ syn=25;
token[m++]=ch;
}
else
{ syn=18;
p--;
}
break;
case ‘*‘: syn=15;
token[m++]=ch;
break;
case ‘/‘: syn=16;
token[m++]=ch;
break;
case ‘(‘: syn=27;
token[m++]=ch;
break;
case ‘)‘: syn=28;
token[m++]=ch;
break;
case ‘{‘: syn=5;
token[m++]=ch;
break;
case ‘}‘: syn=6;
token[m++]=ch;
break;
case ‘;‘: syn=26;
token[m++]=ch;
break;
case ‘\"‘: syn=30;
token[m++]=ch;
break;
case ‘#‘: syn=0;
token[m++]=ch;
break;
case ‘:‘:syn=17;
token[m++]=ch;
break;
default: syn=-1;
break;
}
token[m++]=‘\0‘;
}

时间: 2024-10-06 01:15:28

词法分析-219范楚广的相关文章

词法分析实验报告_219范楚广

实验一.词法分析实验 商业软件3班  范楚广  219 一.        实验目的   编制一个词法分析程序.通过设计一个编译词法分析程序,实现对词法分析转换的理解,加深对转换过程的认识,通过这个软件把理论知识运用到实际之中. 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身 三.        实验方法.步骤及结果测试   1.      源程序名:词法分析_219范楚广.c 可执行程序名:词法分析_219范楚广.exe 2.      原理分析及流程图

219_范楚广_对编译原理的认识

一.编译原理就是什么? 编译原理内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成. 编译原理是计算机专业设置的一门重要的专业课程.虽然只有少数人从事编译方面的工作,但是这门课在理论.技术.方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力. 二.学习编译原理有什么好处? 1.可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的2.可以更加客观的比较不同语言的差异3.更不容易被某个特定语言的宣扬者忽悠4.学习新的语言是

词法分析实验报告-201506110151-董广枢

实验一.词法分析 专业:商业软件工程二班   姓名 董广枢 学号201506110151 一.        实验目的      编制一个词法分析程序 二.        实验内容和要求 1.输入:源程序字符串 2.输出:二元组(种别,单词本身) 3.待分析语言的词法规则 三.        实验方法.步骤及结果测试 #include <stdio.h> #include <string.h>  char prog[80], token[8],ch; int syn,p,m,n,s

bookmarks

<!DOCTYPE NETSCAPE-Bookmark-file-1><!-- This is an automatically generated file. It will be read and overwritten. DO NOT EDIT! --><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"><TITLE>Bookmar

C#——更深入了解面向对象

一.楚广明视频与大话设计 在楚广明视频中和大话设计这本书中,我最大的感悟就是对于面向对象的更深入了解. 1. 类的理解 我在中印象最深刻的一句话就是:"C#程序全部都是由类组成的,所以说C#是一门完全面向对象的程序语言".以前只是对觉得对象是一个人,类是人的总称这样子,但是这样子的想法让我无法把这些理解的东西汇入到代码里,但是,在模仿视频中代码自己创建类,定义属性方法的时候,我觉得我的理解变得深刻了许多. 当然,我还学习了结构struct.与类相比,结构可能更加死板一点,也正如视频中用

自定义实体类在三层架构之间传递数据

自定义实体类是专门承载业务实体数据的类,一般将方法分离出来,只包含属性和字段的定义.每个实体类对应数据库中的一个表,每个属性对应表中的一个相应的字段.使用实体类属于面向对象编程的思想,将每个表封装成对应的类. 1. 为什么使用自定义实体类 (1)使程序更加灵活.如果数据库发生了更改,只需要修改数据实体类的代码,其他层的代码修改量很小. (2)使用面向对象思想将数据库中的表抽象为类,消除了关系数据与类的差别,使程序维护和扩展更方便. (3)更有利于分层架构设计. 2. 使用自定义实体类作为三层架构

快速学习一门新的编程语言

为什么 Objective-C 很难 - linux,dev - 博客园http://www.cnblogs.com/huapox/archive/2012/12/01/3251600.html 9 个指导开发者快速编码/学习的网站推荐 - 楚广明 - 博客园http://www.cnblogs.com/chu888chu888/archive/2012/02/16/2354813.html 教是最好的学 - MNight - 博客园http://www.cnblogs.com/mnight/p

C#之全局观

C#看完的过程中,没有能够及时的总结,导致后面的学习效率没有提上去,已经看过的知识,到后面的学习中,没有了印象.学习和做事一样,从一开始就应该有一个宏观上的了解,看视频的时候,可以把每一集快速的浏览一下,然后对每一集视频简单的画一个思维导图,这样会对视频的宏观上有很好的了解,里面细细的内容可以通过笔记的形式,整理好,这样的学习感觉效率很高. 看完了C#视频之后,弄了本书看了一下,手里的材料楚广明老师对C#的内容,重点讲解了面向对象部分的知识.大概的看过一遍书之后,发现C#的内容跟VB在结构上很类

C#程序设计总结

说实在话,看了楚广明的C#视频教程,感觉讲得有点乱,但大体设计的东西都还在.我就按照自己的理解整合了一遍所涉及的内容. 子曰:"学而时习之,不亦乐乎?",温故而知新,这真的是一件快乐的事.C#早学过去了,但迟迟没有总结.那么学设计模式的时候才发现,没有C#的基础,设计模式是很难学的.侥幸自己学得时候认真了一点,所以相对学起来还是毫不费力的.只是有个别的知识点有印象,但还是想不来.这就需要再回顾回顾了. 过来人看C#是很容易理解的.在这之前,我们学习了VB,对于计算机语言的各方面知识有了