1118 实验三 有限自动机的构造与识别

#include<stdio.h>
char gra[80];
char ch;
int n,p=0,k=0;
struct{
char R[10];
}NFA[10];
char R1[10];
char R2[10];
main()
{
printf("---------------正规文法转换成有穷自动机------------------\n");
printf("请输入正规文法R:");
do{
ch=getchar();
gra[p++]=ch;
}while(ch!='#');
n=strlen(gra);
scaner(gra);
printf("\n");
}
scaner(char *r)
{
int i,j;
int m;
int can=1;
m=strlen(r);
if(m==1||r[1]=='#')
printf("f(%d,%c)=B\n",k,r[0]);
else
{
for(i=0;i<m;i++)
{
ch=r[i];
if(ch=='|')//寻找'|'
{
for(j=0;j<i;j++)
NFA[k].R[j]=r[j];
scaner(NFA[k++].R);
for(j=i+1;j<m;j++)
NFA[k].R[j-i-1]=r[j];
scaner(NFA[k++].R);
can=0;
break;
}
if(ch=='*')//寻找'*'
{
can=0;
break;
}
}
if(can==1)
{
for(i=0;i<m;i++)
{
ch=r[i];
if(ch!='.'&&ch!='#'&&r[i+1]!='#')
printf("f(%d,%c)=%d\n",k++,r[i],k+1);
if(ch!='.'&&ch!='#'&&r[i+1]=='#')
printf("f(%d,%c)=B\n",k,r[i]);
}
}
}
}

 

转载于:https://www.cnblogs.com/LwF39/p/5039999.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验一名称 词法分析程序(2学时) 实验目的 理解词法分析在编译程序中的作用;加深对有穷自动机模型的理解; 掌握词法分析程序的实现方法和技术。 实验内容 选择部分C语言的语法成分,设计其词法分析程序,要求能够识别关键字、运算符、分界符、标识符、常量(至少是整型常量,可以自己扩充识别其他常量)等,并能处理注释、部分复合运算符(如>=等)。单词以二元式形式输出、输出有词法错误的单词及所在行号。 实验要求 (1)待分析的简单的语法 关键字:begin if then while do end … 运算符和界符::= + - * / < <= > >= <> = == ; ( ) # , … 其他单词是标识符id和整型常数num,通过以下正规式定义: id=l(l|d)* (l:letter d:digit) num=dd* 空格、注释:在词法分析中要去掉。 (2)各种单词符号对应的种别编码(参考这张表,可以不同) (3)待分析的源程序: (a)int main() { int a=1,b=2; b/a; /* 注释部分*/ b>a; c=a+b; cout<<c; return 0; } (b)这个待分析程序有词法错误(选做) while ((a+15)>0) { if (2x = = 7) i3=z; } 实验二名称 预测分析程序(2学时) 实验目的 掌握LL(1)文法分析思想;掌握预测分析程序的构造方法。 实验内容 设计及实现能够识别表达式的预测分析程序。 实验要求 (1)总体要求: 1) 根据文法手工或程序方式构造预测分析表; 2) 采用程序方式构造预测分析表时,需计算First()和Follow()集合,有一定难度; 3) 根据预测分析表,设计并实现预测分析总控程序,完成自上而下的语法分析器。 (2)文法的定义(可以选择此文法,也可以自己选择其他文法) (3)给出当输入串为:(i1+i2)*(i3+i4)的分析过程。(输出分析过程中的栈,输入串和利用的产生式等信息)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值