目标:使用rust语言编写一个读取logo语言的编译器,编译器需要能识别原logo语言的语法错误,并使用rust语言unsvg crate来实现按相关作图要求。 unsvg crate对应文档链接如下:https://docs.rs/unsvg/latest/unsvg/
编译器需要识别的Logo语言基本命令如下:
PENUP(提笔,此时移动海龟不进行作画)PENDOWN(落笔, 此时移动海龟进行作画)FORWARD [numpixels:f32](向前步进)BACK [numpixels:f32](向后倒退)LEFT [numpixels:f32](向左平移)RIGHT [numpixels:f32](向右平移)SETPENCOLOR [colorcode:f32](设置线条颜色)TURN [degrees:f32](正参数顺时针旋转,负参数逆时针旋转)SETHEADING [degrees:f32](初始化龟头朝向) <- 老子就要说龟头!SETX [location:f32](设置海龟的X坐标)SETY [location:f32](设置海龟的Y坐标)
1.Logo语言特色赋值语法:MALKE 命令
MAKE DISTANCE": 3 //将3赋值给变量DISTANCE
ADDASSIGN: "DISTANCE: DISTANCE
ADDASSIGN 相当于其它语言中的 ‘+=’, 程序要有识别该命令的能力。
2.Logo语言查询语句:
- XCOR (返回海龟目前的X坐标)
- YCOR (返回海龟目前的Y坐标)
- HEADING (返回目前龟头朝向)
- COLOR (以数字形式返回目前笔刷颜色)
3.LOGO语言条件判断与循环:
- IF 条件判断语法
IF EQ <value1> <value2> [
<line of code>
<line of code>
]
- WHILE 循环语法
WHILE EQ <value1> <value2> [
<line of code>
<line of code>
]
4.LOGO语言中的函数定义,LOGO函数定义语法如下:
TO DoSquare "arg1
FORWARD :arg1
LEFT :arg1
BACK :arg1
RIGHT :arg1
END
其中:
- 函数以TO开头, 后接可自定义函数名称,后接自变量
- 函数以END结尾
5.LOGO语言中的数学表达式:
- 程序需要支持波兰表示法
