社区
C语言
帖子详情
求一个词法程序
free1879
2005-12-20 04:53:52
词法分析难度太大,刚学编译原理!看看各位怎么写的...
...全文
139
2
打赏
收藏
求一个词法程序
词法分析难度太大,刚学编译原理!看看各位怎么写的...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
derekchuang
2005-12-21
打赏
举报
回复
/******************************************************************
*此程序只具备对简单的C语言程序的词法分析,不具备出错处理等高级功能*
*
*
*
*******************************************************************/
#include<stdio.h>
#include<string.h>
FILE *fp;
char ch; //存放最新读进的源程序字符
//将下一个输入字符读到ch中,搜索指示器前移一字符位置
GetChar(){
fscanf(fp,"%c",&ch);
}
//判断ch中的字符是否为空白
int IsEmpty(){
if(ch==' '||ch=='\t'||ch=='\n')
return 1;
else return 0;
}
//判断ch是否为字母
int IsLetter(){
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
return 1;
else return 0;
}
//判断ch是否为数字
int IsDigit(){
if(ch>='0'&&ch<='9')
return 1;
else return 0;
}
//判断ch是否为分隔符
int IsCompart(){
if(ch=='('||ch==')'||ch=='{'||ch=='}'||ch==','||ch==';'||ch=='"')
return 1;
else return 0;
}
//判断ch是否为运算符
int IsOperation(){
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='='||ch=='%'||ch=='<'||ch=='>')
return 1;
else return 0;
}
//是否为保留字
int IsKeyWord(char *c){
if(c=="int"||c=="for"||c=="if")
return 1;
else return 0;
}
//初始化单词符号字符串
Init(char *c){
int i;
for(i=0;i<10;i++)
c[i]='\0';
}
main(){
int i=0,j;
char strToken[10]; //存放构成单词符号的字符串
if((fp=fopen("E:\\编译原理\\a.txt","r"))==NULL){
printf("打开文件出错!\n" );
exit(1);
}
GetChar();
for(j=0;ch!='#';j++){
if(IsEmpty()){
while(IsEmpty()){
GetChar();
}
}
if(IsLetter()){
while(IsLetter()||IsDigit()){
strToken[i]=ch;
i++;
GetChar();
}
strToken[i]='\0';
if(IsKeyWord(strToken))
printf("<%s,保留字>\n",strToken);
else
printf("<%s,标识符>\n",strToken);
Init(strToken);
i=0;
}
if(IsCompart()){
while(IsCompart()){
printf("<%c,分隔符>\n",ch);
GetChar();
}
}
if(IsDigit()){
while(IsDigit()){
strToken[i]=ch;
i++;
GetChar();
}
strToken[i]='\0';
printf("%<s,数字>\n",strToken);
Init(strToken);
i=0;
}
if(IsOperation()){
while(IsOperation()){
strToken[i]=ch;
i++;
GetChar();
}
strToken[i]='\0';
printf("<%s,运算符>\n",strToken);
Init(strToken);
i=0;
}
}
getch();
fclose(fp);
}
sankt
2005-12-21
打赏
举报
回复
http://www.08090.com/c/sr/showart.asp?art_id=5&cat_id=2
http://www.qcode.org/article/qcode/code5/cj/cj4/200511/12392.html
其实这方面的例子很多,可以看看上面的参考一下
设计
一个
简易的
词法
分析器
在学习编译原理时,按照《
程序
设计语言编译原理》(学习教材),设计了
一个
简单的
词法
分析器的代码,可以实现对关键字、标识符,数字的识别,去掉空格符等。下面对关键字和种别码的说明。1、 功能:输入源
程序
、分析源
程序
的单词,输出单词单词符号的种类如下:(1) 关键字(本例所有关键字都是大写)。DIM IF DO STOP END(2) 标识符:表示各种名字,如数组名、过程名和变量名等。标识符(...
使用c语言编写
词法
分析
程序
,用C语言编写
一个
简单的
词法
分析
程序
问题描述:用C或C++语言编写
一个
简单的
词法
分析
程序
,扫描C语言小子集的源
程序
,根据给定的
词法
规则,识别单词,填写相应的表。如果产生
词法
错误,则显示错误信息、位置,并试图从错误中恢复。简单的恢复方法是忽略该字符(或单词)重新开始扫描。相关
词法
规则::=::=::=::=::=::=::=::=a|b|c|……|x|y|z::=0|1|2|3|4|5|6|7|8|9::=+|-::=*|/::=|!...
实验1
词法
分析
程序
设计
【开发语言及实现平台或实验环境】 C++/Clion 【实验目的】 (1)理解
词法
分析在编译
程序
中的作用 (2)加深对有穷自动机模型的理解 (3)掌握
词法
分析
程序
的实现方法和技术 【实验内容】 对
一个
简单语言的子集编制
一个
一遍扫描的
词法
分析
程序
。 【实验要
求
】 (1)待分析的简单语言的
词法
关键字 begin if then while do end 运算符和界符 := + - * / < <= > >= <> = ; ( ) # 其他单词是标识符(ID)和整形常数(N
Lex
词法
分析器
Lex
词法
分析器一.设计内容 熟悉并实现
一个
简单的
词法
分析器 二.设计目的 了解高级语言单词的分类,了解如何识别单词规则,掌握状态图到识别
程序
的编程。 源
程序
中,存在许多编辑用的符号,他们对
程序
逻辑功能无任何影响。例如:回车,换行,多余空白符,注释行等。在
词法
分析之前,首先要先剔除掉这些符号,使得
词法
分析更为简单。 三.实验步骤Lex输入文件由3个部分组成: 定义集(defini
杭电编译原理实验-实验一-
词法
分析
程序
设计
词法
分析
程序
设计实验目的实验内容函数定义
程序
流程图源代码 实验目的 设计、编制并调试
一个
简单语言CP(Compiler Principle)的
词法
分析
程序
,加深对
词法
分析原理的理解。 实验内容 CP语言的
词法
(1) 关键词: begin end if then else for while do and or not 注意:所有关键词都是小写的。 (2) 标识符ID,与标准C语言一致,即:以下划线或字母开头的字母数字下划线组成的符号串。 (3)无符号整数NUM:数字串 (
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章