使用Irony開發譯碼器

使用Irony開發一個針對G代碼的譯碼器。不想使用Lex&Yacc的緣由是:git

1.我只會用C#和Python寫代碼,用Lex&Yacc還得學習新的語法規範,我懶;github

2.Lex&Yacc須要安裝;函數

3.Lex&Yacc將詞法分析和語法分析分開進行,要分別編寫詞法規範和語法規範,感受聽起來就很麻煩工具

之因此使用Irony,是在網上隨便搜的時候,發現了這個工具。能夠直接添加引用到代碼中,使用起來很方便。雖然相關資料不是特別多,可是源代碼開放也有一些例子,是用C#寫的,因此也能讀懂。其次,Irony中詞法分析和語法分析是一塊兒進行的,很方便。學習

關於Irony的資料以下:翻譯

https://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit/Introductioncode

https://www.codeproject.com/Articles/22650/Irony-NET-Compiler-Construction-Kit開發

https://archive.codeplex.com/?p=ironyget

https://github.com/IronyProject/it

G代碼是用來編寫數控程序的,這個不是關鍵了。只須要知道G代碼是一種語言,如今我想編寫一個譯碼器,能夠將用G代碼編寫的數控程序翻譯成加工函數。

首先要編寫符合Irony規範的G代碼的語法規範。使用Irony無需安裝,只要引用Irony.dll就能夠了。

Irony將詞法分析和語法分析一塊兒進行,語法規範就相對應的能夠分爲兩部分,第一部分使用NonTerminal()命令來定義G代碼中的非終止符。第二部分定義非終止符的語法規範。好比:

var linearinterpo = new NonTerminal("Linear Interpolation");

linearinterpo.Rule = ToTerm("G1")|ToTerm("G01");

具體的代碼能夠見github:

https://github.com/Larissa1990/CNC_interpreter

相關文章
相關標籤/搜索