基於BNF正規化的M3中Schema板架語言的解析

2021-07-10 18:37:09 字數 3779 閱讀 3932

基於bnf正規化的m3中schema板架語言的解析

by eattonton

摘要:m3系統中提供了一套完整的板架引數化建模系統,基於這套系統為設計員提供了建立船體結構的基礎。隨著m3在我國造船工業中的廣泛應用,理解m3這套引數化系統的建模系統變得很有必要。引數化建模中除了提供了介面輸入引數外,還提供了schema語句的方式。這篇文章將對schema(sch)語句進行語義的解析。

關鍵字:m3, schema, bnf

1.      前言

m3憑藉其強大的引數化建模系統,能夠為設計員在船體建模方面提供無與倫比的靈活性及規範性,使其能夠建模市面上所有的船型。也正是基於此,m3廣泛應用於船舶工業。m3引數化建模提供了一種sch的描述語言,通過sch語句能夠編輯模型。相比,介面輸入建立模型相比。通過sch語言建立模型具有如下優勢:

優勢1.語言編輯模型具有更強的靈活性,各種引數可以靈活的組合,以滿足設計的需要。

優勢2.對於同一種結構,可以有多種語義的表達方式。這就為建模實現方式提供了靈活性。

優勢3.基於語義的引數化建模,可擴充套件性好。可以通過二次開發的形式,批量快速的生成和編輯語句,同時修改模型。

sch語句是使用者在文字中輸入的,是以文字的形式提供給計算機端的。需要把這些文字解析(parser)成計算語言,電腦程式才能執行這些語句。這邊檔案將介紹,利用bnf正規化構建sch語言的計算機結構,並通過解析程式轉換成我們需要的計算機**。

2.      bnf正規化

bnf是「backus naur form」的縮寫。john backus和peter naur首次引入一種形式化符號來描述給定語言的語法。bnf出現的很早,早期用在對計算機語言的描述,後來隨著技術的發展。bnf也用於對語言的解析,是一種語言的語言。限於篇幅,這篇文章就不展開了。這裡列舉一些bnf正規化的規則:

::=   表示 定義為

|     表示  或者

< >   表示類別名字

需要用到的就這麼點,但是這足夠了。在這篇文章展開之前,先舉乙個加法的及其簡單的例子。

2.1    例子

「1+2」是乙個很簡單的加法公式,當我們以文字的形式給計算機處理時,需要考慮如何把這個公式翻譯成計算機能懂的語言。在高階語言中都有eval函式,直接把文字公式轉換成執行程式。但是,如果沒有這些高階功能,如何去實現這個功能呢。這就需要用到計算機的編譯開發。

針對這個加法公式,並利用編譯原理。我們的思路是這樣的,首先進行詞法分析,分析得到所包含的數字以及符號,再轉換成計算機語言,對該公式進行運算,獲得我們想要的結果。

詞法分析是第一步,也是最重要的一步。可以利用的工具有bnf正規化,正規表示式等。但是正規表示式無法表達遞迴等複雜的語言表達。而bnf在這方面確實優勢。加法公式的bnf的表述如下:

::= [0123456789]*

!公式::= '+' |

表示整數

表示加法公式 而且是遞迴的,也就是說 1+2+3這樣的演算法也是支援的。

有了bnf正規化,下一步就是找乙個解析器。可以利用的解析器也是比較多的,如yecc, goldparser等。通過bnf和解析器組合,這段文字就能被計算機執行了。

bnf主要還是作為編譯開發的一部分,編譯開發又是很底層,很深奧的開發。就需要掌握更多的知識,這篇文章顯然無法達到那樣的高度。只能利用現有的工具,作為工程上面的應用。

3.      schema語句

板架建模需要用的schema語句,語句是格式如下:

not, r50,  cor=1;

其中not為型別字段(statement keyword)

r50為貫穿孔的規格字段

cor=1 表示貫穿孔的位置,它由keyword和value通過等號表示。

schema語句表達模型的方式靈活,在實際建模使用中也是使用極為頻繁。schema語句的bnf正規化表達如下:

::=   |

| ::=

::= [,]

((,|/) {}  )  (...)

上面只是乙個通用的表達,對於具體的某種型別的語句,需要具體的限定,這樣才能把語句文字,解析成我們想要的計算機程式執行物件。

schema語句的具體使用和參考,可以看m3幫助文件(document),hullàplanar modellingàdesign language of tribon hull modelling

4.      語句解析例子

有了前面的分析基礎,下面我們來做乙個具體的sch語句分析。由於整個sch語句體系,還是比較複雜,需要投入一定的精力來完成這個操作。這裡我們列舉了notch孔的語句解析過程。

4.1    分析notch孔的種類

m3系統中板架上面的notch孔按照定位的不同分為以下三種:沿著邊界布置(along a limit),沿著焊縫布置(for seam),沿著角點布置(at corner)

4.2    構建bnf正規化

根據幫助文件,根據這三種型別構建sch語言的bnf正規化描述。

第一,定義notch的規格,下面我們列舉了了其中幾種,如r50

::= 'r'

|'rw'

|'keh''*'

|'keh''*''*'

|'keh''*''*''*'

|'kuh''*'

第二,定義沿著邊界布置

::=  ,lim=

,u|v|x|y|z=

[,along]

第三,沿著焊縫布置

::= [,]

,seam= , (1 ... 25) [,ref]

第四,沿著角點布置

::=, cor=(1 ... 25)

[,lim=(1 ... 25)]

第五,notch語句

::='not,'』,』

|'not,'』,』

|'not,'』,』

其中 ::=::= 為整形資料結構

4.3    建立notch的類

這裡的類是物件導向語言的概念,這裡我們使用c#語言。就是一種物件導向的語言。為了使解析出來的內容能夠被計算機程式執行,就必須建立乙個notch類物件,把解析出來的物件執行在我們的程式中。

4.4    使用解析器parser

上面也提到過解析器,解析器就是能夠根據bnf定義的語義,對sch語句進行解析,並把解析結果例項化乙個類的物件。我們這裡選擇了乙個開源的parser程式。這樣大大的提高了我們開發的效率,也為工程的實際應用提高了可靠性。

通過上面的幾步,實現了我們的目標,能夠把notch語句,轉換成乙個notch類物件。這個物件就能夠很方便的在我們的電腦程式中使用。

5.      小結

這篇文章雖然沒有貼出程式截圖和程式的原始碼,但是基本描述了sch解析的程式實現思路。個人覺得編寫程式,前期的準備很重要。把程式的思路先理清楚,需要使用的工具都弄明白。後續的**編寫就會方便很多。而且程式出來的功能也會更加的滿足我們需求。

sch語言實際是一種小眾的指令碼語言,但是,我們看到了這種語言的強大之處。在m3中還有很多使用這種指令碼語言,來實現功能的地方。這些指令碼語言的使用大大的提高了m3的應用範圍。這也是m3廣泛的被全球的造船企業接受的原因。這篇文章使用bnf正規化為基礎,利用parser解析器技術,對指令碼語言進行解析。為後續充分使用好m3軟體提供了基礎,也為國內想開發高水準的行業解決方案軟體,提供了一點點程式設計方面的小技巧。

ucos在M3中的中斷巢狀機制

第一 nvic和cm3處理器會根據優先順序的設定來控制搶占與巢狀行為。因此,在某個異常正在響應時,所有優先順序不高於它的異常都不能搶占之,而且它自己也不能搶占自己。第二 有了自動入棧和出棧,就不用擔心在中斷發生巢狀時,會使暫存器的資料損毀,從而可以放心地執行服務例程。因為所有服務例程都只使用主堆疊,...

uC OS ii在M3中的任務切換與任務堆疊

1.1 m3入賬序列 1.2 加上手工入棧序列 systick為嵌入到核心中,優先順序比一般中斷優先順序高。若在一般中斷的isr執行過程中,發生了systick異常,則systick會搶占該isr。若此時systick做上下文切換,在m3中將觸發用法fault 在中斷活躍時嘗試切入執行緒模式 即使在...

作品簡介 基於M2M物理引擎的3D太空桌球遊戲

隨著計算機軟硬體技術的飛速發展,碰撞檢測已經成為計算機圖形學和虛擬實境的乙個基本問題,廣泛應用於cad cam 計算機動畫 飛機和汽車駕駛模擬 flight and vehicle simulators 機械人 路徑和運動規劃 path and motion planning 裝配 assembly...