#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++;
}
}
相关推荐
LC-3 子程序调用与模拟栈调用递归函数
在LC-3的编程中,有时候需要重复调用一些子程序,但是又不能像c语言一样定义函数,但是LC-3提供了相当的机制供我们使用 TRAP机制调用子程序 在上一篇文章【LC-3简易四子棋(深大计系1实验4) 思路+代码+详细注释】中,我们提到: 对于输入输出,我们通过一些“伪操作”进行“系统调用”来实现读取字符,输出字符,可是这些操作的本质是TRAP机制来完成的调用 TRAP调用 TRAP将目标中断矢量(也就是trap的操作数,比如TRAP x21操作数是0x21)的高位补0得到一个数x,然后去内存x处寻找下一条
实验二 语法分析1——递归子程序法
目的和内容 1、 实验目的:通过完成语法分析程序,了解语法分析的过程和作用 2、 实验内容:用递归子程序法实现对pascal的子集程序设计语言的分析程序 3、 实验要求:对源程序的内码流进行分析,如为文法定义的句子输出”是”否则输出”否”,根据需要处理说明语句填写写相应的符号表供以后代码生成时使用 文法的改变 为适合递归子程序法,对实验一中的文法改写成无左递归和无左共因子的BNF如下: <程序>→<程序首部><分程序>. <程序首部>→PROGRAM标识符;
编译原理 递归子程序方法 代码
1.定义部分:定义常量、变量、数据结构。 2.初始化:从文件将输入符号串输入到字符缓冲区中。 3.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。
C语言表达式语法分析——递归子程序法
表达式语法分析——递归子程序法 Description 递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。 表达式文法如下: E→TG G→+TG|ε T→FS S→*FS|...
物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等
1.前言 最近对物联网产品自组网技术选型,找到合适的组网技术,让产品自行组网并完成数据的传输。 2.参数对比
功率电感的设计步骤
学习视频原链接截图1截图2。
递归子程序法实现语法分析器
在本次实验中,使用递归子程序法实现了一个简单的语法分析器,能够对输入的程序代码进行语法分析,并输出相应的语法树。本次实验让我深刻认识到了语法分析的重要性,掌握了递归子程序法的实现方法和技巧,对于加深对编译原理的理解和掌握具有重要意义。本次实验的任务是使用递归子程序法实现一个简单的语法分析器,能够对输入的程序代码进行语法分析,并输出相应的语法树。通过本次实验,深入了解了递归子程序法和LL(1)分析表的原理和实现方法,掌握了语法分析的基本技术和方法,同时对编译原理的理论和实践都有了更深入的了解和认识。
FPGA新手避坑指南:手把手教你搞定RTL8211千兆网PHY的时序配置(附Verilog代码)
本文详细解析了FPGA与RTL8211千兆网PHY芯片的时序配置问题,重点介绍了TXDLY/RXDLY引脚设置、FPGA发送端和接收端的Verilog实现,以及调试与验证的完整流程。通过硬件电路设计和代码示例,帮助开发者解决网络连接不稳定、丢包等常见问题,提升千兆网通信的稳定性。
递归
递归的定义: 递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方 法。递归常用来解决结构相似的问题递归有两个基本要素: 1. 边界条件:确定递归到何时终止,也称为递归出口 ...
UE5实现物体高亮描边效果(含UE相关源码浅析)
UE5实现物体高亮描边效果
2024-江苏科技大学-模拟-动态接触角,模拟液滴撞击,comsol软件模拟。
相反,其对液滴粘度和平衡接触角的变化基本不敏感。重力势能的影响显著受过程参数调节,随着液滴直径和密度的增加而增加,而随着初始液滴速度和表面张力系数的增加而减小。通过考虑形状因子和粘度修正因子,可以准确定义表面能和粘性耗散能,使得所提出的半经验修正勺状模型表现出良好的性能,在所有65个研究案例中,液滴最大铺展长度因子(βmax)和中心厚度(h)的相对误差基本分别落在5%和10%的区间内。重力势能的影响受过程参数显著调节,随液滴直径和密度的增大而增大,随液滴初始速度和表面张力系数的增大而减小。
递归下降子程序
让学生深入理解递归下降解析器的原理,掌握文法设计和分析的技巧,提升编程能力,并了解其在语言处理工具中的应用。通过实践编程和性能分析,学生可以拓展应用至更复杂的文法,并尝试优化解析器的设计,从而全面掌握递归下降解析器的相关知识,提升编程和算法能力。在设计递归下降子程序时,需要深入理解文法的定义和递归下降解析器的工作原理,同时考虑到解析过程中可能遇到的各种情况,并设计相应的处理逻辑。否则返回false。在解析过程中,当遇到一个非终结符时,递归调用相应的解析子程序,以便进一步解析该非终结符所表示的语法结构。
液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图
液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图
子程序的嵌套、递归和递推
子程序的嵌套、递归和递推一、子程序嵌套子程序嵌套是指一个子程序中又定义了一个子程序,要求子程序的定义清晰,结构完整,不可以出现定义的交叉。例一、源程序Program ex1:Var i,j:integer;procedure p: function f(i1:integer):integer; procedure q(var i2:integer
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,
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 ...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
编译原理之不带回溯的递归子程序
文法G1: S -> a | ∩ | (T) T -> T , S | S (1) 消去G1的左递归。 S -> a | ∩ | (T) T -> ST’ T -> ,ST’ | ε (2)写出不带回溯的递归子程序 PROCEDURE S; BEGIN IF SYM = 'a' OR SYM = '∩' THEN BEG...
递归子程序的原理
编译原理|递归下降分析子程序
递归下降分析子程序 一、实验目的 掌握最基本的自顶向下分析方法,即递归下降子程序方法,理解其特点和适用范围(回溯,左递归等现象),锻炼递归调用程序的构造方法。 二、实验内容 给定CP语言中简单算术表达式文法G[E]: E→TE’ E’→ATE’|ε T→FT’ T’→MFT’ |ε F→(E) | i A → + | - M → * | / 根据该文法,编写递归下降分析子程序。 【说明】 终结符号...
递归向下子程序分析法实现
递归向下子程序分析法基本思想: 对文法中的每个非终结符(语法成分)编写一个子程序,而子程序的代码结构由相应非终结符的产生式右部所决定: (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’...
编译原理-递归子程序法
0x01 题目描述递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。表达式文法如下: E→TG G→+TG |
编译原理递归子程序语法分析
编译原理递归子程序语法分析 递归子程序法也称为递归下降分析法。该方法的实现思想是:对文法中的每个非终结符号U都编写出一个子程序,以完成该非终结符号所对应的语法成分的分析和识别任务。高级程序设计语言的语法规则通常都是用上下文无关文法来描述的,文法中的符号分为终结符号和非终结符号。 本分析程序所分析的文法如下: G[E]: E→eBaA A→a|bAcB B→dEd|aC C→e|dC 可以求...
D - 表达式语法分析——递归子程序法
Description 递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。 表达式文法如下: E→TG G→+TG | ε T→FS S→*FS | ε F→(E) | i 对于给定的输入串(长度不超过50个符号),请输出
3295



被折叠的 条评论
为什么被折叠?



