词法分析用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 最原始方 ...
随机推荐
- 如何从SAP ECC中抽取簇表数据
打开SAP 客户端工具 ABAP 中 创建包(SE80) 创建函数组 展开ABAP 工作台,双击ABAP Dictionary 字典: 选择第三个data type,输入数据结构名称ZSQL_CLAU ...
- 树莓3B+_apt-get update && apt-get upgrade
在Windows下安装软件,我们只需要有EXE文件,然后双击,下一步直接OK就可以了.但在LINUX下,不是这样的.每个LINUX的发行版,都会维护一个自己的软件仓库,我们常用的几乎所有软件都在这里面 ...
- django中的F和Q
F查询 Django 提供 F() 来做这样的比较.F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值. 查询书id大于\小于价格的书籍 models.Book.ob ...
- php中的Register Globals
参考: http://php.net/manual/zh/security.globals.php
- SDR软件无线电知识要点(一)噪声系数与噪声因子
SDR软件无线电知识要点(一)噪声系数与噪声因子 信号质量如何评估 Noise Figure (NF) or sensitivity and Error Vector Magnitude (EVM) ...
- 网络中可以引用的jquery库
网络项目可以直接引用这个jquery库 <script src="http://www.codefans.net/ajaxjs/jquery-1.4.2.min.js"> ...
- 20155211 实验三 敏捷开发与XP实践
20155211 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园. 实验步骤 (一)敏捷开发与XP 敏捷开发( ...
- 20155330 实验一《Java开发环境的熟悉》(Windows+IDEA)实验报告
实验知识点 JVM.JRE.JDK的安装位置与区别: 命令行运行javac:java:javac -cp; java -cp: PATH,CLASSPATH,SOURCEPATH的设定方法与应用: 包 ...
- 宿主机 PL/SQL Developer 连接虚拟机 ORACLE 数据库
1.确保主机与虚拟机间通信正常,双方关闭window防火墙.如能 ping 通,请确保两机IP在一个网段 2.主机安装orcl客户端 3.虚拟机 D:\app\lin\product\11.2.0\d ...
- Python接口测试实战3(上)- Python操作数据库
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...