2016年秋季《编译原理》课程实验(2014级)表达式语法分析——递归子程序法

本文介绍了一种使用递归子程序法进行表达式语法分析的方法,通过C++实现。代码中定义了栈操作和核心的判断函数f,实现了从输入的表达式字符逆序遍历并进行匹配的过程,最终判断表达式是否符合预设的语法规则。
#include<stdio.h>
#include<string>
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
int num;
stack<char> A;
stack<char> B;
int f(char x,char y)
{
    if(x == 'E')
    {
        cout<<num<<" "<<"E-->TG"<<endl;
        A.pop();
        A.push('G');
        A.push('T');
        num++;
        return 1;
    }
    else if(x == 'G'&&y=='+')
    {
       cout<<num<<" "<<"G-->+TG"<<endl;
       A.pop();
       A.push('G');
       A.push('T');
       A.push('+');
       num++;
      return 1;
    }
    else if(x == 'G'&&y!='+')
    {
      cout<<num<<" "<<"G-->&"<<endl;
      A.pop();
      num++;
      return 1;
    }
    else if(x == 'T')
    {
        cout<<num<<" "<<"T-->FS"<<endl;
        A.pop();
        A.push('S');
        A.push('F');
        num++;
        ret
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值