ShoneSharp語言(S#)的設計和使用介紹系列(3)— 修煉工具

来源:http://www.cnblogs.com/ShoneSharp/archive/2017/12/02/ShoneSharp-3.html
-Advertisement-
Play Games

瞭解一個語言最好的方式就是在編輯器中按照語法規則輸入代碼,然後運行並查看結果是否符合預期。本博文介紹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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 阿裡雲CentOS7.3搭建 Apache+MySQL+PHP環境 參考https://www.cnblogs.com/apro-abra/p/4862285.html 一、安裝Apache 1.安裝 yum -y install httpd yum -y install httpd yum -y ...
  • Ceph官方版本目前支持的糾刪碼很有限,實驗室這塊希望能夠整合我們自主開發的糾刪碼BRS( " B inary R eed– S olomon encoding" ),所以需要編譯Ceph環境。Ceph官方目前推薦的安裝方式都是通過Ceph deploy的工具來安裝配置,搭建起來十分簡單。目前直接通 ...
  • 1、馮洛伊曼的主要思想: (1)用二進位代碼表示程式和數據; (2)電腦採用存儲程式的工作方式; (3)電腦硬體由存儲器、運算器、控制器、輸入設備和輸出設備等五大部件組成。 2、電腦性能的定義 (1)相應時間(Response Time) 從提出請求到被執行的時間。 (2)吞吐率(Throug ...
  • 在裸板2440中,當我們使用nand啟動時,2440會自動將前4k位元組複製到內部sram中,如下圖所示: 然而此時的SDRAM、nandflash的控制時序等都還沒初始化,所以我們就只能使用前0~4095地址,在前4k地址里來初始化SDRAM,nandflash,初始化完成後,才能將nandflas ...
  • 突然發現VS2017.15.4.5 打開項目特別慢,並且生成項目時也要等上好久好久, 一直以為是vs更新的問題,輾轉半天發現是項目本身原因。 dotnet core 項目下如果出現一個文件夾內包含大量的文件,比如node_modules之類的,會影響dotnet run的運行效率, 解決辦法: cs ...
  • http://www.cnblogs.com/edison1105/archive/2012/07/30/2616082.html 1、首先看一個簡單的例子 大家都知道要實現foreach的必須要實現IEnumerable和IEnumerator的介面,只有實現了它們,才能實現遍歷,所以要講fore ...
  • 在nuget中下載ServiceStack.Redis,但是運行之後會出現一個問題: Exception: “Com.JinYiWei.Cache.RedisHelper”的類型初始值設定項引發異常。System.TypeInitializationException: “Com.JinYiWei. ...
  • data.xml 通過 linq to xml ,查找價格超過10的產品,並列印供應商名稱與產品名稱; 輸出 SupplierName=CD-by-CD-by-Sondheim , ProductName=AssassinsSupplierName=Solely Sondheim , Product ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...