Rust项目实战——LOGO编译器(DAY0)

目标:使用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语言中的数学表达式:

  • 程序需要支持波兰表示法

Published by endecoder

MY shitting learning experience

Leave a comment