资源简介
可以根据自定义的词法规则,生成相应的词法分析器。自动构造出该文法的NFA,DFA,并能够识别给定的字符串是否符合该文法规则的算法。并且该算法可以在控制台和MFC下运行。
代码片段和文件信息
/*定义I/o库所用的某些宏和变量 */
#include “stdio.h“
/* 定义 字符串库函数*/
#include “string.h“
/*#define NULL 0;*/
/* prog数组:存放输入的字符串;token数组:用来存放构成单词符号的字符串*/
char prog[80]token[8];
/* ch:存取当前即将分析的字符*/
char ch;
/* syn:用来存放单词符号的种别码; p:缓冲区prog的指针;m:token的指针*/
int synpmnsumpriNo=1num=3;
int kk;
/* rwtab数组存放关键字(均为小写),其特别码为:下标加1 */
char *rwtab[6]={“begin““if““then““while““do““end“};
void scaner();
void lrparser();
void YuJuString();
void statement();
void expression();
void term();
void factor();
main()
{
int i=0;
gotoxy(221);
printf(“此程序为某语法的分析程序!\n\n“);
gotoxy(22);
printf(“你可以验证3个句子!“);
gotoxy(33);
printf(“***************************************************************“);
do{
p=0;kk=0; /*初始化*/
printf(“\n Please input string(end‘#‘): “); /*输入字符串以‘#’结尾*/
/*do{
scanf(“%c“&ch);
prog[p++]=ch;
}while(ch!=‘#‘);*/
gets(prog);
p=0;
scaner();
printf(“\n--------“);
lrparser();
i++;
printf(“\n*************************************************************\n“);
}while(i }
void scaner()
{
m=0;
for(n=0;n<8;n++) token[n]=NULL; /*初始化token数组*/
sum=0; /*初始化sum为0*/
ch=prog[p++];
while(ch==‘ ‘) ch=prog[p++]; /*忽略空格*/
if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘) /*字符*/
{
while(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘||ch>=‘0‘&&ch<=‘9‘)
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]=‘\0‘;
p--;
syn=10;
for(n=0;n<6;n++)
if(strcmp(tokenrwtab[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 ‘<‘: m=0;token[m++]=ch;
ch=prog[p++];
if(ch==‘>‘)
{
syn=21;
token[m++]=ch;
}
else if(ch==‘=‘)
{
syn=22;
token[m++]=ch;
}
else
{
syn=20;
p--;
}
token[m]=‘\0‘;
break;
case ‘>‘: m=0;token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
p--;
}
token[m]=‘\0‘;
break;
case ‘:‘: m=0;token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{
syn=18;
token[m++]=ch;
}
else
{
syn=17;
p--;
}
token
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4892 2008-06-02 15:41 词法分析器报告\实验2.c
文件 70656 2008-06-03 21:02 词法分析器报告\实验2.doc
文件 2076160 2008-06-02 22:59 词法分析器报告\词法分析器报告.doc
文件 2389 2008-05-28 17:40 词法分析器报告\Win32Complier 5-25\AccidenceMachine.cpp
文件 1170 2008-05-28 17:40 词法分析器报告\Win32Complier 5-25\AccidenceMachine.h
文件 619 2008-05-28 17:46 词法分析器报告\Win32Complier 5-25\Config.h
文件 28 2008-05-22 23:08 词法分析器报告\Win32Complier 5-25\DequeNode.cpp
文件 670 2008-05-24 00:38 词法分析器报告\Win32Complier 5-25\DequeNode.h
文件 2786 2008-05-28 17:40 词法分析器报告\Win32Complier 5-25\Grammar.cpp
文件 2672 2008-05-27 22:58 词法分析器报告\Win32Complier 5-25\Grammar.h
文件 4537 2008-05-26 22:59 词法分析器报告\Win32Complier 5-25\GrammarStruct.h
文件 17738 2008-05-28 17:50 词法分析器报告\Win32Complier 5-25\GrammarToNFA.cpp
文件 1273 2008-05-31 13:33 词法分析器报告\Win32Complier 5-25\GrammarToNFA.h
文件 2351 2008-06-02 17:52 词法分析器报告\Win32Complier 5-25\Main.cpp
文件 580 2008-05-25 18:03 词法分析器报告\Win32Complier 5-25\NFAChartStruct.h
文件 15001 2008-05-28 17:31 词法分析器报告\Win32Complier 5-25\NFAToDFA.cpp
文件 2326 2008-05-28 17:30 词法分析器报告\Win32Complier 5-25\NFAToDFA.h
文件 4712 2008-05-25 17:15 词法分析器报告\Win32Complier 5-25\Win32Complier.dsp
文件 551 2008-05-07 12:37 词法分析器报告\Win32Complier 5-25\Win32Complier.dsw
文件 123904 2007-08-25 12:43 词法分析器报告\Win32Complier 5-25\Win32Complier.ncb
文件 54784 2007-08-25 12:43 词法分析器报告\Win32Complier 5-25\Win32Complier.opt
文件 260 2007-08-25 11:16 词法分析器报告\Win32Complier 5-25\Win32Complier.plg
文件 30565 2008-05-28 17:46 词法分析器报告\Win32Complier 5-25\Debug\AccidenceMachine.obj
文件 5982 2008-05-28 17:46 词法分析器报告\Win32Complier 5-25\Debug\DequeNode.obj
文件 33390 2008-05-28 17:46 词法分析器报告\Win32Complier 5-25\Debug\Grammar.obj
文件 65341 2008-05-31 13:33 词法分析器报告\Win32Complier 5-25\Debug\GrammarToNFA.obj
文件 30752 2008-06-02 17:52 词法分析器报告\Win32Complier 5-25\Debug\Main.obj
文件 121710 2008-05-28 17:46 词法分析器报告\Win32Complier 5-25\Debug\NFAToDFA.obj
文件 222208 2007-08-25 11:16 词法分析器报告\Win32Complier 5-25\Debug\vc60.idb
文件 167936 2008-06-02 17:52 词法分析器报告\Win32Complier 5-25\Debug\vc60.pdb
............此处省略10个文件信息
相关资源
- C语言词法分析程序
- 简易词法分析器——基于C语言
- 词法分析C++源码
- 正规式到NFA的转换
- 词法分析代码内有报告
- 编译原理词法分析实验
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- PL0编译器词法检查与语法分析器
- 编译原理课程设计词法语法分析器
- LEX实现一个C语言子集的词法分析器
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
- 无符号数的词法分析程序 C++版
- LEX与YACC实现C语言词法分析和语法分析
- 编译原理 词法分析器
- 简易C语言编译器的设计与实现
- 编译原理综合性实验 选择部分C语言的
- 编译器前两步
- 实验一:词法分析程序c++
- PL/0语法分析程序
- 词法分析器(c语言实现)246881
- 编译原理 词法分析 源代码
- 词法分析C++程序
- 编译原理——词法分析器设计与实现
- 编译原理 C语言实现词法分析
- 不同进制数的识别程序设计
- 编制一个读单词过程,从输入的源程
- 编译原理C语言实现词法分析程序带容
- 编译原理课程设计+报告用高级语言
评论
共有 条评论