T299014 J++语言

题目背景

在这个题目中,你要尝试制作一个编译器来编译一个语言

题目描述

`J++` 语言是一个自定义语言并且是编译型语言 先通过以下代码片段来尝试理解 J++ ### J++ 语言片段: ~~~ main()->int{ a->int; a::read()->int; b->int; b::read()->int; ans->int:a+b; ans::write->int; 0::return; } ~~~ 以上是 J++ 语言代码片段,实现了a+b, 在J++中,缩进是不必要的。 程序必须执行在main函数当中,main函数为int类型,必须返回0,不返回算编译错误 函数的声明: `函数名称 引用符 数据类型` 其中,函数名称为不为数字开头且不含空格的字符串,引用符是 `->` 或者是 `>>`,两者等价,没有区别,数据类型共有6种:`int`,`float`,`string`,`bool`,`void`,`指针类型为前五种类型任意一个加上*号`, **函数后面跟的数据类型并不是返回值类型!** 函数后方的数据类型是传入参数的数据类型,如果没有参数请加一个int`函数名称()->int` 如`a->int`,声明一个 `int` 类型的 `a`,`b>>int*` 声明一个 `int` 类型的指针变量 **注意!void类型与c++不一样** void类型可以存储任何类型的数据 特别的,指针变量赋值跟 C++ 类似,需要注意的是在 J++ 中赋值为 ~~~ a->int; b->int*; b:&a; *b:a; ~~~ 在这个代码中又出现了新的符号`:`,这个符号表示赋值 继续回到代码一当中:`read()`和`write()` read是读入函数,write是输出函数,通过`::`传递参数给函数(所有函数都是这样调用的,如果有多参数则如下代码) ~~~ a,b,c::read()->int; ~~~ 如有多参数则应该使用`,`隔开变量。 调用函数后方的`->`代表参数传递类型,如有多参数类型不同,见以下代码。 ~~~ a,b,c::read()->int[a,c]->float[b]; ~~~ 在数据类型后方加入一对`[]`,里面填写该类型的变量 如果不想写`->数据类型`则可在函数外侧对该函数进行准确声明:`read(a,b,c)->int[a,b]->float[b];`,然后在下方代码调用时可直接写`a,b,c::read();` 如果是自定义函数,见下文 第n个片段 ~~~ sum()->int[2[a,b]]{//新建一个有2个int参数sum函数,参数名分别为a,b for i:a ; iint[2[a,b]]{}` 代表新建一个函数,有两个int类型变量 如果要新建一个有多参数且类型不同的函数,两种方法:`a(a,b,c)->int[a,b]->bool[c]`,在这里面变量类型是固定的,如果希望变量随时改动,可以这样`a(a,b,c)`,但是需要在调用函数时使用前文所提到的调用方法 如果希望变量数量不固定,可以这样定义:`a(a...)`,在函数声明时在括号中先写几个变量名,代表最少数量,后方加三个点,即可传参数量多,但对于一般的函数,传太多的参数是没有用的。 一般这种方法是用来对write函数声明使用的 如果函数的变量值是`void`,则该函数可以穿任何类型变量且不用在调用时填写参数类型 注释:`//`后方的内容直接跳过 循环结构:`for i:a;i

输入格式

好几行,表示 `J++` 代码片段 然后是输入数据,不超过 $3$ 行,全部为 `int` 类型 ### 输入数据不一定和程序应输入数量相等

输出格式

如果报错,先输出一个`error\n`,“\n为换行符”再输出错误行数 **你需要使用序数词的缩写形式,如第一行输出1st,第二行2nd等等** **可能有多行报错,每行一个,全部输出** 运行成功则按照程序运行输出输入数据的答案

说明/提示

#### 本题数据纯手造 对于10%的数据,程序没有输入 对于30%的数据,程序不超过10行,无函数定义和循环结构 对于50%的数据,程序不超过15行,有循环结构无函数定义 对于70%的数据,程序不超过20行,有函数定义无循环结构 对于100%的数据,程序不超过30行,有函数定义有循环结构 基数词序数词对照表 | 基数词 | 序数词 | 基数词|序数词| 基数词|序数词| | :----------: | :----------: | :----------:| :----------:| :------:| :---------:| | 1 | 1st | 2 | 2nd | 3 | 3rd | 4 | 4th | | 5 | 5th | 6 | 6th | 7 | 7th | 8 | 8th | | 9 | 9th | 10 | 10th | 11 | 11th | 12 | 12th | | 13 | 13th | 14 | 14th | 15 | 15th | 16 | 16th | | 17 | 17th | 18 | 18th | 19 | 19th | 20 | 20th | | 21 | 21st | 22 | 22nd | 23 | 23rd | 24 | 24th | | 25 | 25th | 26 | 26th | 27 | 27th | 28 | 28th | | 29 | 29th | 30 | 30th |