编译原理文法分析构造文法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
我来回答
猜你喜欢
- 请问这三根电线分别代表什么?一根绿色,一根黄色,一根黄绿混合的.
- 在括号里写出诗人和诗题
- 如图是我省生产的某种钙盐包装标签上的部分文字.为了测定此盐中的钙元素含量,取10g这种盐溶于水,加入足量盐酸,生成0.1
- 番茄属于植物体的哪个结构层次
- 如图所示,在平面直角坐标系中,△ABO的顶点坐标分别为A(-1,3),B(2,1),O(0,0).求△ABO的面积!
- 参考《事物的正确答案不止一个》和《应有格物致知精神》两篇文章,给老师提几条建?
- I will ask someone to water my flowers改为同义句并说明理由
- 白雪公主的英文帮我把他们翻译成英文1、白雪2、公主3、白雪公主4、白马5、王子6、白马王子注:翻译是带着序号
- 改正成语:例子:伪心实意(去伪-存真 真心实意)砖石俱焚(抛砖-引玉 玉石俱焚)水破天惊(水落-石出
- 对文艺复兴时期的西方文化有什么样的看法.