递归子程序

语法分析:自上而下分析 概述本节将介绍编译程序构造中的一些典型的语法分析方法。语法分析器的功能,自上而下分析面临的问题,LL(1)分析法语法分析器的功能语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。语言的语法结构是用上下文无关文法描述的。因此,语法分析器的工作本质上就是按文法的产生式,识别输入符号串是否为一个句子。这里所说的输入串是指由单词符号(文法的 阅读详情
#include<bits/stdc++.h>
using namespace std;
#define J G
string s;
int N=0;
int cur =0;
void E();
void T();
void G();
void F();
void S();

int main(){
    cin>>s;
    if(s[cur]!='i'&&s[cur]!='('){
        cout<<"error"<<endl;
        exit(0);
       }
    E();
    if(s[cur]=='#')
        cout<<"accept"<<endl;
    else
        cout<<"error"<<endl;

}
void E(){
    cout<<N<<" E-->TJ"<<endl;
    N++;
    T();
    G();
}
void T(){
    cout<<N<<" T-->FS"<<endl;
    N++;
    F();
    S();
}
void G(){
    if(s[cur]=='+')
    {
         cout<<N<<" G-->+TJ"<<endl;
         N++;
         cur++;
         T();
         G();
    }
    else
    {
        cout<<N<<" G-->&"<<endl;
        N++;
    }
}
void F(){
    if(s[cur]=='(')
    {
        cout<<N<<" F-->(E)"<<endl;
        N++;
        cur++;
        E();
        if(s[cur]==')'){
            cur++;
        }
        else
        {
            cout<<"error"<<endl;
            exit(0);
        }
    }
    else if(s[cur]=='i'){
        cout<<N<<" F-->i"<<endl;
        N++;
        cur++;
    }
//        else if(s[cur]=='i'){
//        cout<<N<<" F-->i"<<endl;
//        N++;
//        cur++;
//    }

}
void S(){
    if(s[cur]=='*'){
        cout<<N<<" S-->*FS"<<endl;
        N++;
        cur++;
        F();
        S();
    }
    else{
        cout<<N<<" S-->&"<<endl;
        N++;
    }
}

汇编语言 | 递归子程序实现阶乘 最近在弄一门课程(汇编语言)的复习,觉得这个部分的内容,对于回过头来理解以往学习的高级语言还是很有帮助的。   【例题】 阶乘函数,对于任一个大于等于0的正整数N,其函数值定义为:FACT(N)=1(当N = 0时) FACT(N)=N*FACT(N-1)  (当N&gt; 0时)其算法为: (1)测试N=0吗?是,则令FACT(N)=1,返回; (2)保存N,并令N=N-1,调用自身求... 阅读详情

相关推荐

LC-3 子程序调用与模拟栈调用递归函数

在LC-3的编程中,有时候需要重复调用一些子程序,但是又不能像c语言一样定义函数,但是LC-3提供了相当的机制供我们使用 TRAP机制调用子程序 在上一篇文章【LC-3简易四子棋(深大计系1实验4) 思路+代码+详细注释】中,我们提到: 对于输入输出,我们通过一些“伪操作”进行“系统调用”来实现读取字符,输出字符,可是这些操作的本质是TRAP机制来完成的调用 TRAP调用 TRAP将目标中断矢量(也就是trap的操作数,比如TRAP x21操作数是0x21)的高位补0得到一个数x,然后去内存x处寻找下一条

AKGWSB 's blog 3295

实验二 语法分析1——递归子程序法

目的和内容 1、 实验目的:通过完成语法分析程序,了解语法分析的过程和作用 2、 实验内容:用递归子程序法实现对pascal的子集程序设计语言的分析程序 3、 实验要求:对源程序的内码流进行分析,如为文法定义的句子输出”是”否则输出”否”,根据需要处理说明语句填写写相应的符号表供以后代码生成时使用 文法的改变 为适合递归子程序法,对实验一中的文法改写成无左递归和无左共因子的BNF如下: <程序>→<程序首部><分程序>. <程序首部>→PROGRAM标识符;

weixin_45816954的博客 6454

编译原理 递归子程序方法 代码

1.定义部分:定义常量、变量、数据结构。 2.初始化:从文件将输入符号串输入到字符缓冲区中。 3.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。

C语言表达式语法分析——递归子程序法

表达式语法分析——递归子程序法 Description 递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。 表达式文法如下: E→TG G→+TG|ε T→FS S→*FS|...

xiaomingming99的博客 3133

物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等

1.前言 最近对物联网产品自组网技术选型,找到合适的组网技术,让产品自行组网并完成数据的传输。 2.参数对比

谁念西风独自凉 4万+

功率电感的设计步骤

学习视频原链接截图1截图2。

qq_32419593的博客 4886

递归子程序法实现语法分析器

在本次实验中,使用递归子程序法实现了一个简单的语法分析器,能够对输入的程序代码进行语法分析,并输出相应的语法树。本次实验让我深刻认识到了语法分析的重要性,掌握了递归子程序法的实现方法和技巧,对于加深对编译原理的理解和掌握具有重要意义。本次实验的任务是使用递归子程序法实现一个简单的语法分析器,能够对输入的程序代码进行语法分析,并输出相应的语法树。通过本次实验,深入了解了递归子程序法和LL(1)分析表的原理和实现方法,掌握了语法分析的基本技术和方法,同时对编译原理的理论和实践都有了更深入的了解和认识。

m0_68447809的博客 1874

FPGA新手避坑指南:手把手教你搞定RTL8211千兆网PHY的时序配置(附Verilog代码)

本文详细解析了FPGA与RTL8211千兆网PHY芯片的时序配置问题,重点介绍了TXDLY/RXDLY引脚设置、FPGA发送端和接收端的Verilog实现,以及调试与验证的完整流程。通过硬件电路设计和代码示例,帮助开发者解决网络连接不稳定、丢包等常见问题,提升千兆网通信的稳定性。

weixin_28732953的博客 541

递归

递归的定义:                 递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方                   法。递归常用来解决结构相似的问题递归有两个基本要素:                                 1. 边界条件:确定递归到何时终止,也称为递归出口                       ...

hsy_666的博客 1141

UE5实现物体高亮描边效果(含UE相关源码浅析)

UE5实现物体高亮描边效果

专注GIS开发 7334

2024-江苏科技大学-模拟-动态接触角,模拟液滴撞击,comsol软件模拟。

相反,其对液滴粘度和平衡接触角的变化基本不敏感。重力势能的影响显著受过程参数调节,随着液滴直径和密度的增加而增加,而随着初始液滴速度和表面张力系数的增加而减小。通过考虑形状因子和粘度修正因子,可以准确定义表面能和粘性耗散能,使得所提出的半经验修正勺状模型表现出良好的性能,在所有65个研究案例中,液滴最大铺展长度因子(βmax)和中心厚度(h)的相对误差基本分别落在5%和10%的区间内。重力势能的影响受过程参数显著调节,随液滴直径和密度的增大而增大,随液滴初始速度和表面张力系数的增大而减小。

qq_15963745的博客 512

递归下降子程序

让学生深入理解递归下降解析器的原理,掌握文法设计和分析的技巧,提升编程能力,并了解其在语言处理工具中的应用。通过实践编程和性能分析,学生可以拓展应用至更复杂的文法,并尝试优化解析器的设计,从而全面掌握递归下降解析器的相关知识,提升编程和算法能力。在设计递归下降子程序时,需要深入理解文法的定义和递归下降解析器的工作原理,同时考虑到解析过程中可能遇到的各种情况,并设计相应的处理逻辑。否则返回false。在解析过程中,当遇到一个非终结符时,递归调用相应的解析子程序,以便进一步解析该非终结符所表示的语法结构。

ha_ha_ha_wys的博客 676

液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

Rockyoung 3322

子程序的嵌套、递归和递推

子程序的嵌套、递归和递推一、子程序嵌套子程序嵌套是指一个子程序中又定义了一个子程序,要求子程序的定义清晰,结构完整,不可以出现定义的交叉。例一、源程序Program  ex1:Var   i,j:integer;procedure p:  function f(i1:integer):integer;    procedure  q(var i2:integer

sfzhaokunn的专栏 5683

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

汇编——子程序应该怎么写、子程序传参、Fibonacci递归举例

在学习子程序的过程中,看了整个的ppt,也没搞明白一个带有子程序的汇编程序长什么样。 我们先看一个例子,然后分析。 datas segment w dw 10 h dw 6 turns dw 30 start_x dw 20 start_y dw 20 datas ends stack segment stack dw 32 dup(?) stack ends code segment assume cs:code,ds:datas,

筱羊冰冰 6464

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汇编语言(八)之利用子程序的嵌套和子程序的递归调用,实现N!

汇编语言:利用子程序的嵌套和子程序的递归调用,实现N! 题目要求 利用子程序的嵌套和子程序的递归调用,实现N!的运算。 程序代码及运行 data segment org 3000h result dw 0000h org 3100h n db 8 data ends code segment assume cs:code start: mov ax,data mov ...

XYshaonianhaofang的博客 3566

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

编译原理之不带回溯的递归子程序

文法G1: S -&gt; a | ∩ | (T) T -&gt; T , S | S (1) 消去G1的左递归。 S -&gt; a | ∩ | (T) T -&gt; ST’ T -&gt; ,ST’ | ε (2)写出不带回溯的递归子程序 PROCEDURE S; BEGIN IF SYM = 'a' OR SYM = '∩' THEN BEG...

Jane_96的博客 7689

递归子程序的原理

Acapplella的博客 319

编译原理|递归下降分析子程序

递归下降分析子程序 一、实验目的 掌握最基本的自顶向下分析方法,即递归下降子程序方法,理解其特点和适用范围(回溯,左递归等现象),锻炼递归调用程序的构造方法。 二、实验内容 给定CP语言中简单算术表达式文法G[E]: E→TE’ E’→ATE’|ε T→FT’ T’→MFT’ |ε F→(E) | i A → + | - M → * | / 根据该文法,编写递归下降分析子程序。 【说明】 终结符号...

匿名用户小易 5656

递归向下子程序分析法实现

递归向下子程序分析法基本思想: 对文法中的每个非终结符(语法成分)编写一个子程序,而子程序的代码结构由相应非终结符的产生式右部所决定: (1)产生式右部的终结符与输入符号相匹配 (2)非终结符与相应的子程序调用对应 本程序采用文法: E→E+T|E-T|T|-E T→TF|T/F|F F→(E) | i 消除左递归: E→TE’| -EE’ E’→+TE’| -TE’|ε T→FT’ T’→FT’...

weixin_44712846的博客 572

编译原理-递归子程序法

0x01 题目描述递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。表达式文法如下: E→TG G→+TG |

StriveBen的博客 5055

编译原理递归子程序语法分析

编译原理递归子程序语法分析 递归子程序法也称为递归下降分析法。该方法的实现思想是:对文法中的每个非终结符号U都编写出一个子程序,以完成该非终结符号所对应的语法成分的分析和识别任务。高级程序设计语言的语法规则通常都是用上下文无关文法来描述的,文法中的符号分为终结符号和非终结符号。 本分析程序所分析的文法如下: G[E]: E→eBaA A→a|bAcB B→dEd|aC C→e|dC 可以求...

weixin_43824521的博客 5895

D - 表达式语法分析——递归子程序法

Description 递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。 表达式文法如下: E→TG G→+TG | ε T→FS S→*FS | ε F→(E) | i 对于给定的输入串(长度不超过50个符号),请输出

qq_45885219的博客 1393
上一篇: Django框架安装启动入门
下一篇: ViewModel数据持久化
ArtinCode
博客等级 码龄9年 23粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值