编译原理文法分析构造文法G[E]的LL(1)分析表:G[E]:E®TMM®+TM|eT®FNN&

编译原理文法分析

构造文法G[E]的LL(1)分析表:

G[E]:

E®TM

M®+TM|e

T®FN

N®*FN|e

F®(E)|i

代码实现如下:#include

char * spush(char *stack,char *pt);

bool analyse(char *p);

void main()

{

//将分析串存放在二维数组中

char input[5][10]={"i+i#",

"i*(i+i)#",

"i*i+i#",

"i+*#",

"+i*i#"};

bool flag; //定义一个布尔型的标记量

for(int h=0;h

问答/416℃/2024-05-14 07:33:25

优质解答:

改完了,能文法分析出来了!

大概 跟你说下 你的错误吧:

出错地点:

1.声明的stack[50]没有初始化;

2.stack的入栈是错误的,按照你的方式,如果原来有TM,再加入T->FN,则M就被挤出来了.(这里很关键,你对照我给你改的再看看)

3.s指针在你入栈操作以后并没有指向栈顶,而是保持了不变,这肯定是有问题的.(传入push函数的时候直接传参数s就好了.)

4.if(*s==*p){***}else{}的else的右括号管辖的范围 有错误

总之你对照我给你改的再看看吧.我把我的测试输出 也给保留了.你好对照点.

(PS.我用的vs2005,用的时候你改下头申明,其他一样)

// grammar.cpp :Defines the entry point for the console application.

//

#include "stdafx.h"

#include

using namespace std;

char * spush(char *stack,char *pt);

bool analyse(char *p);

void main()

{

//将分析串存放在二维数组中

char input[5][10]={"i+i#",

"i*(i+i)#",

"i*i+i#",

"i+*#",

"+i*i#"};

bool flag; //定义一个布尔型的标记量

for(int h=0;h

我来回答

猜你喜欢

Copyright © 作文乐园 Inc.
Www.821218.Com All Rights Reserved
网站、品牌合作请联系