ShoneSharp语言(S#)的设计和使用介绍系列(3)— 修炼工具
ShoneSharp语言(S#)的设计和使用介绍
系列(3)— 修炼工具
作者:Shone
声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp。
摘要: 了解一个语言最好的方式就是在编辑器中按照语法规则输入代码,然后运行并查看结果是否符合预期。本博文介绍S#编辑器软件界面及其相关各模块的主要功能,并通过通过带有局部变量的S#代码来表达和生成几何图形,从而说明了S#代码的常用编写流程。
软件: S#语言编辑解析运行器,运行环境.NET 4.0,绿色软件,单个EXE直接运行,无副作用。网盘下载链接为https://pan.baidu.com/s/1dF4e08p
今天新开一节专门介绍编辑器的功能,语言功能将在后续系列进行详细介绍。
一、工具菜单栏
编辑器工具栏功能有:
- “打开”按钮:读取现有S#文本文件(*.shone)到编辑区中。
- “保存”按钮:保存当前编辑的S#文本到指定的文件(*.shone)中。
- “剪切”按钮:剪切选中S#代码文本到粘贴板中。
- “复制”按钮:复制选中S#代码文本到粘贴板中。
- “粘贴”按钮:从粘贴板中复制S#代码文本到编辑区中。
- “撤销”按钮:撤销上一次编辑操作。
- “重做”按钮:重做上一次撤销操作。
- “精简”按钮:对编辑区中符合语法的S#文本进行空白精简和语法高亮。如eval(a = 1, b = 2 : a + b)将精简化紧凑的文本:eval(a=1,b=2:a+b)。
- “格式”按钮:对编辑区中符合语法的S#文本进行位置格式化和语法高亮。如eval(a = 1, b = 2 : a + b)将格式化成如下更加整齐美观的S#文本,注意精简化和格式化只影响S#代码外观,不影响S#代码的语义和计算结果。
eval
(
a = 1 ,
b = 2 :
a + b
)
- “转为计算值”按钮:把当前S#代码替换为对应最终计算结果的S#代码,注意中间过程代码会被抹去,如eval(a=1,b=2:a+b)转换后为3。
菜单栏功能有:
- “常量”主菜单中提供常用π , ε , e , ∞ , true , false的快捷输入。
- “函数”主菜单中提供大部分高级函数的快捷输入示例。
- “语句”主菜单中提供大部分高级语句的快捷输入示例。
二、代码编辑区
S#代码编辑区包含有三个标签页,分别为“S#代码编辑”、“二维编辑”和“计算结果”,点击不同标签页则切换进入相应S#代码编辑或查看模式。
1) S#代码编辑
S#代码编辑即系统默认的支持语法高亮的S#代码文本编辑模式。除了具有常规的文本输入功能外,如前所述在输入字母、点号或Ctrl+J组合键时会弹出下拉选择框方便输入各种符号如常量、变量、运算符、函数、属性或方法名称。另外把鼠标放在各种符号上将显示该符号的相应格式、说明以及当前求值数据结果。

在编辑S#代码文本时采用键盘或鼠标改变当前输入或选择区域时将在下面状态栏中显示相应的行、列、位置及选中字符数等信息。
2)二维编辑
二维编辑模式为S#代码组成结构和二维几何求值提供了更加直观的可视化编辑和查看方式,这对于含有几何函数的各种复杂S#代码特别有用。如下面S#代码用于表达吊具的侧向断面图形,在二维编辑模式下该S#代码对应的几何图形位置、形状都显示在图形区中。点击不同S#代码节点标签,图形区将用红色对标签和图形进行高亮显示,通过不断点选标签即可看到图形的生成过程。
RectCWH(0,(0,-200),740,400).InsPoint(0,(0,-860)).Fillet([100,0]).Merge(CircCR(0,(0,-700),40))

图形区还可以按住鼠标中键进行平移、滚动鼠标中键进行缩放,还可以点击右键菜单进行图形显示的配置操作。
3)计算结果
计算结果用于显示当前编辑的整个S#代码或某个选定S#代码节点的计算结果。选定S#代码节点有三种方式:一是在S#代码编辑模式下采用鼠标点击指定的文本,二是在二维编辑模式下采用鼠标点击指定的标签或图形,三是在右侧语法树中采用鼠标点击指定的节点。一旦改变了当前选中节点则计算结果文本框结果也相应改变,右下角的选中节点图形也会相应改变。

右侧面板区包含有多个切换按钮,分别为“词法”、“语法”、“查找”和“所有”,点击不同按钮则切换进入相应的辅助编辑或查看功能面板。
三、右侧辅助面板
1)词法面板
所有S#代码都有对应的词法树,其每个树节点是不可分割的最小符号单元。

点击不同树节点,则在下方编辑框中可以独立修改该节点文本。
另外在选定节点上点击鼠标右键可弹出菜单,选择“定位到文本”菜单项可定位并选中S#代码文本编辑框中相应文本。
2)语法面板
所有符合S#语法规则的S#代码都有对应的语法树,其每个树节点是对应的语法解析节点。注意不符合语法规则的S#代码只有词法树而没有语法树,这时“语法”切换按钮为灰色。

点击不同树节点,则在下方编辑框中可以独立修改该节点文本。如果选中节点的计算值是个几何图形,那么右下角预览区还会显示该选中节点的对应图形。把鼠标放在语法树节点上将显示该节点符号的相应格式、说明以及当前求值数据结果。
另外在选定节点上点击鼠标右键可弹出菜单,各菜单项功能说明如下:
定位到文本:可定位并选中S#代码文本编辑框中的相应文本。
复制S#代码:可复制当前选中节点的S#代码文本到系统剪贴板中。
复制结果:可复制当前选中节点的计算结果到系统剪贴板中。注意结果通常也是一个S#代码,只包含常量而不包含任何变量。
复制实值:可复制当前选中节点的计算结果实际值到系统剪贴板中。注意大部分情况下实值与结果差不多,但表达字符串时有区别,实值不包含引号和转义符号。
3)查找面板
该面板提供了用于对S#代码文本编辑框内容进行查找或替换的功能。可以在指定需要查找内容的同时选择不同的大小写或全字匹配条件。另外在指定替换内容后可以逐个进行替换,也可以一次性全部进行替换。

4)所有面板
所有面板用于提供S#语言预置的所有S#代码符号(包含各种常量、运算符、函数、属性和方法等)的语法格式和输入示例,以便于用户按照数据类型查找、浏览或输入指定的S#代码符号。
直接从S#代码符号列表中双击或拖放所需图形则将在当前S#代码的编辑位置处插入对应的S#代码符号示例,点击分类下拉选择框还可以切换到不同的数据类型S#代码符号类别。

四、S#代码示例
本次示例的目的是通过带有局部变量的S#代码来表达和生成下图中的几何图形。注意示例主要用于说明S#代码常用编写流程,其中使用的具体公式或函数不必深究,后续将会有详细介绍。

1)局部变量需求分析
假设每个柱状图形宽度为W,高度为H,倒圆角半径为R。阵列图形的竖向列数和间距分别为Nx和Dx,横向排数和间距分别为Ny和Dy。
2)输入局部求值基本S#代码
采用eval求值函数可以设置局部变量并对最终S#代码进行求值,打开S#代码编辑器输入如下S#代码即可。

3)修改成单个柱状图形S#代码
单个柱状图形可以使用宽高矩形(RectCWH几何函数)进行倒圆角(.Fillet方法)来生成,把上述eval函数中的最终求值S#代码0改为如下图S#代码即可。

4)扩展成柱状图形阵列S#代码
柱状图形阵列可以使用水平垂直居中阵列(.Panscar方法)来生成,继续修改上述eval函数中的最终求值S#代码如下图即可。

5)测试S#代码并输出AutoCAD图形
测试S#代码比较简单,直接修改S#代码中局部变量的赋值即可,如修改W为20即可见到每个柱状图形都变宽了。把局部变量的赋值修改完成后,选择CAD菜单中的“输出到AutoCAD窗口中”即可生成相应的CAD图形并可用于设计等用途。注意:由于该项功能依赖于CAD已被剥离了,这里主要说明用途,使得实例更加完整可信。

声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp。
软件: S#语言编辑解析运行器,运行环境.NET 4.0,绿色软件,单个EXE直接运行,无副作用。网盘下载链接为https://pan.baidu.com/s/1dF4e08p
ShoneSharp语言(S#)的设计和使用介绍系列(3)— 修炼工具的更多相关文章
- ShoneSharp语言(S#)的设计和使用介绍系列(1)— 开篇
ShoneSharp语言(S#)的设计和使用介绍 系列(1)- 开篇 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. 一 ...
- ShoneSharp语言(S#)的设计和使用介绍系列(4)— 入门概述
ShoneSharp语言(S#)的设计和使用介绍 系列(4)- 入门概述 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...
- ShoneSharp语言(S#)的设计和使用介绍系列(2)— 掀开盖头
ShoneSharp语言(S#)的设计和使用介绍 系列(2)- 掀开盖头 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...
- ShoneSharp语言(S#)的设计和使用介绍系列(11)—“类”披炫服靓妆化成“表”
ShoneSharp语言(S#)的设计和使用介绍 系列(11)—“类”披炫服靓妆化成“表” 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Sh ...
- ShoneSharp语言(S#)的设计和使用介绍系列(10)— 富家子弟“语句“不炫富
ShoneSharp语言(S#)的设计和使用介绍 系列(10)— 富家子弟“语句“不炫富 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Sho ...
- ShoneSharp语言(S#)的设计和使用介绍系列(9)— 一等公民“函数“爱炫巧
ShoneSharp语言(S#)的设计和使用介绍 系列(9)— 一等公民“函数“爱炫巧 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Shon ...
- ShoneSharp语言(S#)的设计和使用介绍系列(8)— 最炫“公式”风
ShoneSharp语言(S#)的设计和使用介绍 系列(8)— 最炫“公式”风 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSha ...
- ShoneSharp语言(S#)的设计和使用介绍系列(7)— 布尔Bool及对象Object
ShoneSharp语言(S#)的设计和使用介绍 系列(7)— 布尔Bool及对象Object 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ ...
- ShoneSharp语言(S#)的设计和使用介绍系列(6)— 字符串String
ShoneSharp语言(S#)的设计和使用介绍 系列(6)— 字符串String 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneS ...
随机推荐
- Chrome等浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法
当我们在做开发时,调试页面图片会出现部分图片无法正常显示,并且确认图片的地址正确: 按F12 Debug查看报错原因,提示net::ERR_BLOCKED_BY_CLIENT错误,但当我们点击图片地址 ...
- Java多线程高并发学习笔记——阻塞队列
在探讨可重入锁之后,接下来学习阻塞队列,这边篇文章也是断断续续的写了很久,因为最近开始学ssm框架,准备做一个自己的小网站,后续可能更新自己写网站的技术分享. 请尊重作者劳动成果,转载请标明原文链接: ...
- 脱壳第三讲,UPX压缩壳,以及补充壳知识
脱壳第三讲,UPX压缩壳,以及补充壳知识 一丶什么是压缩壳.以及壳的原理 在理解什么是压缩壳的时候,我们先了解一下什么是壳 1.什么是壳 壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我 ...
- 读书笔记-你不知道的JS上-混入与原型
继承 mixin混合继承 function mixin(obj1, obj2) { for (var key in obj2) { //重复不复制 if (!(key in obj1)) { obj1 ...
- 压缩感知重构算法之子空间追踪(SP)
SP的提出时间比CoSaMP提出时间稍晚一些,但和压缩采样匹配追踪(CoSaMP)的方法几乎是一样的.SP与CoSaMP主要区别在于“In each iteration, in the SP algo ...
- 1.Introduction 介绍
Welcome to Log4j 2! Introduction Almost every large application includes its own logging or tracing ...
- Android 开发笔记___spinner__适配器基础_arrayadapter
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...
- Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书)
前言 在我写完Centos7.4下用Docker-Compose部署WordPress这篇文章后,我的个人博客已经正式的开始运作.但考虑到网站访问的安全性以及今后可能会重复利用服务器来部署其他网站的可 ...
- H5定位
百度地图javaScript API 一.在html文件中引入 <script src="http://api.map.baidu.com/api?ak=Uk9tDddYkrQImXw ...
- spring+struts2+hibernate整合
web.xml需要配置 <context-param> <param-name>contextConfigLocation</param-name> <par ...