#include <stdio.h>
#include <string.h> char string[],word[],ch;
int type,p,i,n,sum;
char keyword[][]={"begin","if","then","while","do","end"}; //关键字数组 void scaner(void); main()
{
p=;
printf("\n\n请输入一个程序段(以'#'结束):\n");
do{
scanf("%c",&ch);
string[p++]=ch;
}while(ch!='#');
printf("单词符号\t种别码 \n");
p=;
do{
scaner();
switch(type)
{
case :
printf(" %-10d%5d\n",sum,type);
break;
case -:
printf("有无法识别的字符\n");
return ;
break;
default:
printf(" %-10s%5d \n",word,type);
break;
}
}while(type!=);
} void scaner(void)
{
sum=;
for(i=;i<;i++)
word[i++]= NULL; ch=string[p++];
i=; while((ch==' ')||(ch=='\n'))
ch=string[p++]; if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
{
while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='')&&(ch<='')))
{
word[i++]=ch;
ch=string[p++];
} p--;
type=; //先将以字母开头的字符识别为标识符 for(n=;n<;n++)
if(strcmp(word,keyword[n])==) //关键字数组比较,相同则表示为关键字,种别码即为下标值加一
{
type=n+;
break;
}
} else if((ch>='')&&(ch<=''))
{
while((ch>='')&&(ch<=''))
{
sum=sum*+ch-''; //将字符型转化为整形sum
ch=string[p++];
}
p--;
type=;
} else //else语句内识别除关键字、标识符、数字以外的其他字符
{
switch(ch)
{
case '+':
type=;
word[i++]=ch;
break; case '-':
type=;
word[i++]=ch;
break; case '*':
type=;
word[i++]=ch;
break; case '/':
type=;
word[i++]=ch;
break; case ':':
word[i++]=ch;
ch=string[p++];
if(ch=='=')
{
type=;
word[i++]=ch;
}
else
{
type=;
p--;
}
break; case '<':
word[i++]=ch;
ch=string[p++];
if(ch=='=')
{
type=;
word[i++]=ch;
}
else
{
type=;
p--;
}
break; case '>':
word[i++]=ch;
ch=string[p++];
if(ch=='=')
{
type=;
word[i++]=ch;
}
else
{
type=;
p--;
}
break; case '=':
type=;
word[i++]=ch;
break; case ';':
type=;
word[i++]=ch;
break; case '(':
type=;
word[i++]=ch;
break; case ')':
type=;
word[i++]=ch;
break; case '#':
type=;
word[i++]=ch;
break; default:
type=-;
break;
}
}
word[i++]='\0'; //word字符数组变字符串
}

词法分析程序(C)的更多相关文章

  1. 词法分析程序 LEX和VC6整合使用的一个简单例子

    词法分析的理论知识不少,包括了正规式.正规文法.它们之间的转换以及确定的有穷自动机和不确定的有穷自动机等等... 要自己写一个词法分析器也不会很难,只要给出了最简的有穷自动机,就能很方便实现了,用if ...

  2. 用C语言编写一个简单的词法分析程序

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...

  3. 0917 词法分析程序(java版)

    1.运行结果: 2.源代码: package 词法分析;import java.util.Scanner;public class fenxi {public static void main(Str ...

  4. Atitit 发帖机系列(7) 词法分析的方法attilax大总结)

    Atitit 发帖机系列(7) 词法分析的方法attilax大总结) 1.1. 词法分析貌似俩大方法,一个直接根据状态图转换,一个根据dfa1 1.2. switchcase或者ifelse 最原始方 ...

  5. PL/0与Pascal-S编译器程序详细注释

    学校编译课的作业之一,要求阅读两个较为简单的编译器的代码并做注释, 个人感觉是一次挺有意义的锻炼, 将自己的心得分享出来与一同在进步的同学们分享. 今后有时间再做进一步的更新和总结,其中可能有不少错误 ...

  6. Yacc 与 Lex 快速入门(词法分析和语法分析)

    我们知道,高级语言,一般的如c,Java等是不能直接运行的,它们需要经过编译成机器认识的语言.即编译器的工作. 编译器工作流程:词法分析.语法分析.语义分析.IR(中间代码,intermediate ...

  7. Go语言程序结构分析初探

    每一种编程语言都有自己的语法.结构以及自己的风格,这也是每种语言展现各自魅力及众不同的地方.Go也不例外,它简单而优雅,与此同时使用起来也很有趣.在本文中,我们将讨论以下几点: Go程序结构 如何运行 ...

  8. 第一章 flex单词计数程序

    学习Flex&Bison目标, 读懂SQLite中SQL解析部分代码 Flex&Bison简介Flex做词法分析Bison做语法分析 第一个Flex程序, wc.fl, 单词计数程序 ...

  9. 【C/C++】程序如何来,编译全过程

    概述    编译的目的是把人书写的高级语言代码翻译成目标程序的语言处理程序,编译用的程序(例如gcc)称为编译系统. 一个编译系统把一个源程序翻译成目标程序的工作过程分为5个阶段:词法分析.语法分析. ...

随机推荐

  1. Dom4j解析xml文件

    dom4j是一个Java的XML API,类似于jdom,用来读取的XML文件,由于它是将文件解析完存放在内存当中的,所以不适合解析大的XML文件,但就方便性和性能方面,一定程度要优于JDK中Domc ...

  2. Vue.js:轻量高效的前端组件化方案

    转发一篇尤老师对vue.js的介绍,了解vue.js的来龙去脉.不过现在已经是2.0了,也有添加一些新的东西,当然有些东西也改了. Vue.js:轻量高效的前端组件化方案 Vue.js 是我在2014 ...

  3. MetInfo 5.1 自动化getshell工具

    title: MetInfo V5.1 GetShell一键化工具 date: 2016-06-08 22:40:32 categories: Hacker tags: - Hacker - Tool ...

  4. Http原理理解及内容整理

    更多资料及交流请加群:

  5. Camtasia 录屏说明

    准备好要录制的屏幕或网页,在即将播放的位置暂停住. 从开始菜单位置“TechSmith”启动Camtasia Recorder 8,其界面如下所示: 注意,要录制系统声音,须在Recorded inp ...

  6. Python之路,Day7 - Python基础7 面向对象

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  7. Oracle基础知识(一)、简介与安装

    文章提纲 Oracle简介与发展历程 安装实例(面向普通开发者) 一.Oracle简介与发展历程 中文名称甲骨文公司,全称为甲骨文股份有限公司(甲骨文软件系统有限公司).甲骨文已超越 IBM ,成为继 ...

  8. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  9. struts2笔记(3)

    关于回显: 如果是int型,默认就会回显为0,如果不想让回显,则Integer就好 //**************************************声明式验证************* ...

  10. express细节点注意

    删除 cookie 需要这么 res.cookie('admin_uid',"null",{maxAge:0, httpOnly:true, path:'/',domain:'.o ...