瞭解一個語言最好的方式就是在編輯器中按照語法規則輸入代碼,然後運行並查看結果是否符合預期。本博文介紹S#編輯器軟體界面及其相關各模塊的主要功能,並通過通過帶有局部變數的S#代碼來表達和生成幾何圖形,從而說明瞭S#代碼的常用編寫流程。 ...
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