词法分析用c++实现的
#include<stdio.h>
#include<string.h>
int i,j,k,sign,flag,number,run;
char ch;
char word[10];
char program[500];
int Scan(char program[])
{
char *keyword[8]={"iii""begin","if","then","while","do","end"};
number=0;
flag=0;
j=0;
ch=program[i++];
while(ch=='\n'||ch==' '||ch=='\t'||ch=='\r')
{
ch=program[i++];
}
if(ch>='a'&&ch<='z')
{
while(ch>='a'&&ch<='z')
{
word[j++]=ch;
ch=program[i++];
}
i--;
word[j++]='\0';
for(k=0;k<8;k++)
{
if(strcmp(word,keyword[k])==0)
{
flag=1;
sign=k+1;
}
else
{
flag=0;
sign=300;
} //是关键字,不是标识符//
break;
}
}
if(ch>'0'&&ch<'9') //是不是数字//
{
number=0;
while(ch>'0'&&ch<'9')
{
number=number*10+(ch-'0');
ch=program[i++];
}
sign=200;
i--;
}
else
switch(ch)
{
case '=':{
if(ch=='=')
{
word[j++]=ch;
word[j]='\0';
sign=25; //=//
}
break;
}
case '<':{
if(ch=='<')
{
word[j++]=ch;
word[j]='\0';
ch=program[i++];
}
if(ch=='=')
{
word[j++]=ch;
word[j]='\0';
sign=21;
}
else
{
i--;
sign=20;
}
break;
}
case '>':{
if(ch=='>')
{
word[j++]=ch;
word[j]='\0';
ch=program[i++];
}
if(ch=='=')
{
word[j++]=ch;
word[j]='\0';
sign=24;
}
else
{
i--;
sign=23;
}
break;
}
case '(':{
if(ch=='(')
{
word[j++]=ch;
word[j]='\0';
sign=27;
}
break;
}
case ')':{
if(ch==')')
{
word[j++]=ch;
word[j]='\0';
sign=28;
}
break;
}
case ':':{
if(ch==':')
{
word[j++]=ch;
word[j]='\0';
ch=program[i++];
}
if(ch=='=')
{
word[j++]=ch;
word[j]='\0';
sign=18;
}
else
{
i--;
sign=17;
}
break;
}
case '#':{
if(ch=='#')
{
word[j++]=ch;
word[j]='\0';
sign=0;
}
break;
}
case ';':{
if(ch==';')
{
word[j++]=ch;
word[j]='\0';
sign=26;
}
break;
}
case '+':{
if(ch=='+')
{
word[j++]=ch;
word[j]='\0';
sign=13;
}
break;
}
case '-':{
if(ch=='-')
{
word[j++]=ch;
word[j]='\0';
sign=14;
}
break;
}
case '*':{
if(ch=='*')
{
word[j++]=ch;
word[j]='\0';
sign=15;
}
break;
}
case '/':{
if(ch=='/')
{
word[j++]=ch;
word[j]='\0';
sign=16;
}
break;
}
case '@':{
if(ch=='@')
{
word[j++]=ch;
word[j]='\0';
sign=0;
}
}
return sign;
}
int main()
{
int i=0,run=1,sign=0,sum=1,ent;
while(run)
{
int j;
for(j=0;j<500;j++)
program[j]=' ';
for(j=0;j<10;j++)
word[j]=' ';
printf("请输入一段源代码");
do{
ch =getchar();
program[i++]=ch;
}while(ch!='@');
i=0;
do{
sign=Scan(program);
if(sign==13)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==14)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==15)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==16)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==17)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==18)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==20)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==21)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==22)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==24)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==25)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==26)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==27)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign==28)
{
printf("操作符 %8s %5d",word,sign);
sum++;
ent=1;
}
if(sign>=1&&sign<=8)
{
printf("关键字 %8s %5d",word,sign);
sum++;
ent=1;
}
} while(sign!=0);
printf("是否继续?y or N");
getchar();
ch=getchar();
if(ch=='n'||ch=='N')
run=0;
}
return 0;
词法分析用c++实现的的更多相关文章
- js词法分析
JavaScript的高级知识---词法分析 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 函数在运行的瞬间, ...
- 编译原理-词法分析05-正则表达式到DFA-01
编译原理-词法分析05-正则表达式到DFA 要经历 正则表达式 --> NFA --> DFA 的过程. 0. 术语 Thompson构造Thompson Construction 利用ε ...
- 跟vczh看实例学编译原理——二:实现Tinymoe的词法分析
文章中引用的代码均来自https://github.com/vczh/tinymoe. 实现Tinymoe的第一步自然是一个词法分析器.词法分析其所作的事情很简单,就是把一份代码分割成若干个tok ...
- 深入JavaScript:词法分析、连续赋值猜想
JavaScript:词法分析.连续赋值猜想 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5851642.html 深夜发文,先吐槽下博客园的编 ...
- 简单的词法分析和语法分析(C++实现,CodeBlocks+GCC编译)
说明: 分析的语言是SNL语言,详见<编译程序的设计与实现>( 刘磊.金英.张晶.张荷花.单郸编著) 词法分析就是实现了词法分析的自动机 语法分析使用递归下降法 运行结果: 词法分析 得到 ...
- 编译原理-词法分析04-NFA & 代码实现
编译原理-词法分析04-NFA & 代码实现 0.术语 NFA 非确定性有穷自动机nondeterministic finite automation. ε-转换ε-transition 是无 ...
- js的高级知识---词法分析
词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active ...
- python成长之路【第十六篇】:JavaScript的高级知识---词法分析
一.词法分析方法 js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 二.具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active O ...
- Javascript词法分析
词法分析的过程: 先分析参数 分析变量声明 分析函数声明 具体步骤: 在函数运行前的一瞬间,先生成Active Object活动对象; 函数声明的参数,形成AO的属性,值为undefined 接收参数 ...
- Atitit 发帖机系列(7) 词法分析的方法attilax大总结)
Atitit 发帖机系列(7) 词法分析的方法attilax大总结) 1.1. 词法分析貌似俩大方法,一个直接根据状态图转换,一个根据dfa1 1.2. switchcase或者ifelse 最原始方 ...
随机推荐
- 【Sklearn系列】KNN算法
最近邻分类 概念讲解 我们使用的是scikit-learn 库中的neighbors.KNeighborsClassifier 来实行KNN. from sklearn import neighbor ...
- hive 优化 (转)
Hive优化 Hive优化目标 在有限的资源下,执行效率更高 常见问题 数据倾斜 map数设置 reduce数设置 其他 Hive执行 HQL --> Job --> Map/Reduce ...
- python教程(三)·函数进阶(上)
在介绍了函数定义的方法后,再来介绍一些进阶知识 参数收集 有时候我们需要参数的数量是任意的,比如print函数的参数的数量是任意的,print函数的内部实现我们不探究,但是单单是参数数量可变这一方面实 ...
- Myeclipse破解总结
今天安装svn,Myeclipse莫名的崩了,然后就重装,然后不知为什么一直失败...经过无数次尝试,终于成功,应该是把这个破解过程遇到的所有问题都遇到了吧.有个别细节我没尝试,但以下总结用于Myec ...
- 课下测试CH01补交
课下测试CH01补交 ( 单选题 | 1 分) Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比. A . 正确 B . 错误 正确答案: B 你的答案: 未作答 ...
- 238. Product of Array Except Self(对O(n)和递归又有了新的理解)
238. Product of Array Except Self Total Accepted: 41565 Total Submissions: 97898 Difficulty: Med ...
- 成都Uber优步司机奖励政策(4月16日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Java中如何创建一个确保唯一的名字,文件名
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客要讲的有,如何创建一个唯一的文件名,创建一个唯一的String字符串 为什么要创建唯一呢?再很多情况下 ...
- django使用流程
1.安装django包 (命令行)>pip install django # conda install django 2.安装成功后,可以新建django项目 1(命令行)>django ...
- python 内置模块(sys)
sys.argv 命令行参数List,第一个元素是程序本身路径sys.exit(n) 退出程序,正常退出时exit(0)sys.version 获取Py ...