语法分析器c语言 递归子程序,算术表达式文法的语法分析(递归子程序法).pdf

算术表达式文法的语法分析(递归子程序法)

算术表达式文法的语法分析

——递归子程序法

一、实验内容

EE+T|T

对文法 TT*F|F 进行语法分析。

F(E)|i

二、程序源代码 (C++ )

/*文法可表示成 E -->TE'

* E'-->+TE'

* T -->FT'

* T'-->*FT'

* F -->i|(E)

*/

#include

#include

using namespace std;

void e();

void e1();

void t();

void t1();

void f();

string str;

char sym;

int p = 0;

bool result = true;

void advance()

{

cout << "advance()" << endl;

//如果是多位数,跳过后面的数字直接读数字后的运算符

if (isdigit(str[p]))

{

while (isdigit(str[p]))

{

p++;

}

1

}

else

{

p++;

}

sym = str[p];

}

void error()

{

result = false;

}

/*

* 主函数

*/

int main()

{

cin >> str;

sym = str[p];

e();

if (result)

{

cout << "Accept!" << endl << endl;

}

else

{

cout << "Error!" << endl << endl;

}

return 0;

}

void e()

{

cout << "e()" << endl;

t();

e1();

}

2

void e1()

{

cout << "e1()" << endl;

if (sym == '+')

{

advance();

t();

e1();

}

}

void t()

{

cout << "t()" << endl;

f();

t1();

}

void t1()

{

cout << "t1()" << endl;

if (sym == '*')

{

advance();

f();

t1();

}

}

void f()

{

cout << "f()" << endl;

if (isdigi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值