M语言

$M$语言功能丰富,语法浅显易懂,是$OI/ACM$人士的不二选择,因为它不需要Shift,极大地提高了写代码的人的运行效率,现在$MMM$已经发布$1.00$版本,但是$MMM$写出了框架后,就不想写编译器了,你能帮他写写编译器吗?

对于1.00版本,有一下几个语法

基本运算

a = b 即把$a$赋值为$b$

a=b add c即 a=b+c

a=b mul c即 a=b*c

a=b div c即 a=b/c (默认为整除)

a=b mod c 即 a=b%c

b bigger c即b > c, 若b >c 则为1否则为0

b smaller c即 b < c ,若b < c 则 为1否则为0

a pow b c 即$a^b ~ mod ~ c$

if [k] 如果k为真,则进行if引导的语句计算(参见下面”括号”)这里的if没有else语句

‘[‘与’]’

表示括号,例如数学公式$a=(c+b)*d$

则为 a=[b+c]*d

变量

目前支持 int , iint ,uint三种。

int 和 c++的int一样

iint即为c++的longlong

uint 即为c++的unsigned int

括号

$M$语言没有大括号,因为它要按烦人的Shift

因此$MMM$想到了一个办法,就是在行前加\,表示缩进

1
2
3
4
5
6
7
int a,b,c,d
in[a]
if [a]
\ in[b]
if [b]
\\ in [c]
\in [d]

用c++的写法,就是这样的

1
2
3
4
5
6
7
8
9
10
11
int a,b,c,d;
cin>>a;
if(a)
{
cin>>b;
if(b)
{
cin>>c;
}
cin>>d;
}

循环

for i begin at a end at b 即$i$在$[a,b]$中循环。

例如这个代码

1
2
3
4
int i,a,b,c
int a=1,b=2
for i begin at a end at b
\ c=c add a

则表示 每次循环中c加上了i,这段代码运行完后c为3

输入输出

out [c] 表示输出c

out endl表示输出换行符,即\n

in [c] 表示输入c

out abcd 输出”abcd”而非变量abcd的乘积。

值得注意的是,每个out/in 后面最多有3个参数,并且此时必为一个字符串一个变量一个换行符。

调试

支持在线询问一个变量的值

debug [x] 即在线询问x当前的值,这个东西相当于 out nowx= [x] endl

​ 当x 不存在的时候,你需要输出 x is not there

x未被使用的时候,你需要输出 x has no val以及一个换行符\n 而非 nowx=0 \n

支持库

目前支持 mstdio ,mmathmdebug 两个头文件

mstdio 顾名思义,就是输入输出使用的头文件,有in,out

mmath 会有 pow 这个函数

mdebug 会有debug这个函数

使用方式 use+头文件名

比如use mmath

编译

你的代码需要编译才能运行

编译是检查你的语法正确性,而非你的代码正确性。

现在 你需要 用 compa 来编译你的函数,如果你的代码出现了以下几种问题,则不被编译通过

1变量名错误,例如你使用了mmath 这个变量名

当然,我们会给你一份非法变量名表,并且可以复制

mmath,mstdio,mdebug,debug,int,out,use,[,]

我们的程序员可没有那么马虎,他只会把 int,in,out

三个变量声明,而且不一定会声明这三个,因此你只需要判断这三个。

2 重复声明变量

1
2
int a
int a

此时也是不行的。

3 未被声明的变量

1
2
int b
in [a]

此时也是不行的

4 函数使用时没有出现支持库

1
2
3
int a
in [a]
a = a pow b c

这里b,c未被声明,所以不能用。

如果编译出现了问题,你需要找到第一个出现问题的地方,格式为ce at col x,x为当前行号 ,并且停止编译,注意,debug内变量未声明不是错误。

现在我们会给你一段代码(格式见输入格式),你需要运行这段代码并且输出结果或者判定此程序CE

Author: MMMsc0.618
Link: http://yoursite.com/2019/11/07/M语言/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付宝

Comment