什么是网站开发时间进度表,广州物流网站建设,华为云做网站,wordpress小型商城上周在朋友中问了一圈#xff0c;发现没有几个人知道Logo语言的#xff0c;或许#xff0c;这门古老的语言现在用的人已经非常少了#xff0c;除了国外有少量的用户将Logo语言用于教育外#xff0c;估计国内不会有人使用这门语言。其实#xff0c;Logo语言本来也就是以编… 上周在朋友中问了一圈发现没有几个人知道Logo语言的或许这门古老的语言现在用的人已经非常少了除了国外有少量的用户将Logo语言用于教育外估计国内不会有人使用这门语言。其实Logo语言本来也就是以编程教育为目的的一门寓教于乐的编程语言因此对于小朋友学计算机编程还是有些帮助的使用Logo控制小海龟在屏幕上画出各种美妙的图案可以让小朋友对编程产生浓厚的兴趣。在90年代我刚刚接触电脑的时候当时国内比较流行的就是各种品牌的学习机比较有名的有中华学习机、小霸王学习机、裕兴电脑等。其中有些学习卡中就自带LOGO绘图语言比如裕兴电脑的早期学习卡带中就带有LOGO语言在LOGO语言中使用一些非常简单的命令就能够绘制出非常漂亮的图案。比如执行以下指令这段指令的意思是让小海龟向前爬行100步然后向右旋转144度以此重复5次就画出了一颗五角星。有关LOGO语言的详细介绍可以参考百度百科相关介绍。出于兴趣以及对童年的回忆我使用C#语言基于Irony语法解析器生成框架实现了LOGO语言的语法解析和执行系统LogoSharp。于是我可以在自己的应用程序中使用LogoSharp来实现LOGO程序的执行并控制海龟实现图形绘制LogoSharp基于MIT协议开源地址是https://github.com/daxnet/logo-sharp。我也将其封装成NuGet包可以在.NET Framework以及.NET Core下直接使用。首先将LogoSharp NuGet包添加到自己的项目中注意目前是Preview的版本所以如果使用Visual Studio中的NuGet界面需要勾选Include prerelease的复选框。如果使用Package Manager Console那只要敲入命令就行了1Install-Package LogoSharp -Version 0.9.20-preview然后在你的应用程序中使用LogoSharp1234567static void Main(string[] args){    var logo  new Logo();    logo.Forward  (s, e)         Console.WriteLine($Forwarded {e.Steps} steps.);    logo.Execute(FD 102);}LogoSharp开发框架本身是基于事件的也就是只要有控制小海龟动作的指令被执行就会产生一个对应的事件比如上面的代码中执行FD 102指令时就会产生一个Forward事件表示此时需要让小海龟向前走102步在这个演示代码中Forward事件处理函数就会将前进步数输出到控制台。在LogoSharp的源代码中有一个测试程序就是上面动图所演示的这个程序它是一个Windows Forms的应用程序它就是订阅了LogoSharp产生的事件然后控制小海龟的运动并通过GDI在指定的窗体上绘制图形。目前LogoSharp支持以下功能语言特性变量的定义与使用MAKE指令局部变量与全局变量表达式一元表达式Unary Expression二元表达式Binary Expression常量表达式Constant Expression函数调用表达式Function Call Expression过程TO … END程序结构函数调用平方根函数SQRT随机函数RANDOM内联注释行使用分号;作为注释起始符基本行为控制命令PENDOWN/PD下笔此时移动海龟会进行线段绘制PENUP/PU提笔此时移动海龟不会进行绘制SETPENCOLOR/SETPC/PC设置线条的颜色SETPENSIZE设置线条的粗细PENERASE/PE设置下笔行为为擦除行为PENNORMAL/PN设置下笔行为为绘制行为基本绘制命令LEFT/LT向左旋转RIGHT/RT向右旋转FORWARD/FD向前步进BACKWARD/BK/BACK向后倒退DELAY海龟行为间隔延迟单位毫秒DRAW/CLS/CLEARSCR/CLEARSCREEN/CS清除屏幕内容海龟控制命令HOME海龟归位到屏幕中心SHOWTURTLE/ST将海龟显示在屏幕上HIDETURTLE/HT将海龟隐藏起来流程控制命令REPEAT重复执行支持RepCount内部参数用于指代当前的迭代数目前LogoSharp还有很多可以完善的地方IF/WHILE语句暂不支持但很快会支持目前不支持一条语句分行编写造成的结果是有可能一条语句会写得很长除了上面列表中的命令其它命令暂不支持不过今后也会陆续加入不支持布尔值和布尔表达式以及逻辑操作内置函数调用需要用花括号括起来比如{SQRT 2}。主要是因为函数调用本身是表达式而其参数列表也是表达式那么如果不用括号这样的界定符括起来语法上就会出现二义性。比如hello world 2你可以说hello是调用函数的函数名它有两个参数world和2也可以说hello是一个没有参数的函数调用而world是另一个函数它的参数为2此外今后也会加入更多的内建函数并使得函数扩展更为方便。LogoSharp是一个非常有趣的项目今后我会进一步做一些扩展比如丰富函数库以及提供更好的编程环境等。后续我也会介绍一些有关Irony语法解析器生成框架的内容以及LogoSharp实现中遇到的一些有趣的问题及其解决办法。原文地址https://sunnycoding.cn/2019/07/09/logo-sharp-csharp-implementation/.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com