LL(1)文法E->TE’ E->+TE’ |ε T->FT’ T’->*FT’ |ε F->(E) | i 要求用C++编写器预测分析程序,测试用例i*i+i#,
答案:1 悬赏:0 手机版
解决时间 2021-07-30 08:39
- 提问者网友:我是我
- 2021-07-29 13:08
LL(1)文法E->TE’ E->+TE’ |ε T->FT’ T’->*FT’ |ε F->(E) | i 要求用C++编写器预测分析程序,测试用例i*i+i#,请问谁知道啊?急用,谢谢
最佳答案
- 五星知识达人网友:笑迎怀羞
- 2021-07-29 14:01
#include <stdio.h>
#include <stdlib.h>
#define error( c ) { printf( "match failed for '%c'", c ); exit(1); }
#define lbr() { if ( *next != '(' ) error( '(' ); match( "(" ); ++next; }
#define rbr() { if ( *next != ')' ) error( ')' ); match( ")" ); ++next; }
#define match( msg ) { puts( msg ); }
char* next;
void E(); void EE(); void T(); void TT(); void F();
void E()
{
match( "TE" );
T(); EE();
}
void EE()
{
char c = *next;
if( c == '+' ) {
++next;
match( "+TE'\t+" );
T(); EE();
}
}
void T()
{
match( "FT'" );
F(); TT();
}
void TT()
{
char c = *next;
if ( c == '*' ) {
++next;
match( "*FT'\t*" );
F(); TT();
}
}
void F()
{
char c = *next;
if ( c == '(' ) {
match( "(E)" );
lbr(); E(); rbr();
} else if ( c == 'i' ) {
match( "i\ti" );
++next;
} else
error( 'i' );
}
int main()
{
next = "i*i+i";
E();
}
#include <stdlib.h>
#define error( c ) { printf( "match failed for '%c'", c ); exit(1); }
#define lbr() { if ( *next != '(' ) error( '(' ); match( "(" ); ++next; }
#define rbr() { if ( *next != ')' ) error( ')' ); match( ")" ); ++next; }
#define match( msg ) { puts( msg ); }
char* next;
void E(); void EE(); void T(); void TT(); void F();
void E()
{
match( "TE" );
T(); EE();
}
void EE()
{
char c = *next;
if( c == '+' ) {
++next;
match( "+TE'\t+" );
T(); EE();
}
}
void T()
{
match( "FT'" );
F(); TT();
}
void TT()
{
char c = *next;
if ( c == '*' ) {
++next;
match( "*FT'\t*" );
F(); TT();
}
}
void F()
{
char c = *next;
if ( c == '(' ) {
match( "(E)" );
lbr(); E(); rbr();
} else if ( c == 'i' ) {
match( "i\ti" );
++next;
} else
error( 'i' );
}
int main()
{
next = "i*i+i";
E();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯