簡體   English   中英

Jay,單聲道C#編譯器並更改語法

[英]Jay, the mono C# compiler and changing the grammar

我正在嘗試為Mac上的Mono C#編譯器設置構建環境。 目的是擴展研究項目的語法。 我一直在努力建立版本。 我敢肯定答案很簡單,但到目前為止,我還找不到任何有用的信息。

我希望在MonoDevelop中有一個解決方案,該語法是語法的一部分,在項目編譯時要考慮語法的任何更改。

到目前為止,我找到的解決方案文件只有一個cs-parser.cs文件,該文件在我從項目頁面獲取的源代碼中不存在。 我猜想這個文件是在cs-parser.jay上運行解析器生成器的結果,但是我找不到有關如何將其設置為構建步驟的信息(或者為此手動運行解析器生成器)

有關如何使用mcs的演練教程的鏈接將不勝感激,也可以通過簡單的逐步操作來逐步實現

README.makefiles

如果你的程序的內置光源“,即從其他文件(比如由jay生成),定義一個變量BUILT_SOURCES調用並沒有列出在$(PROGRAM).sources源生成的源文件:

 ======================================== PROGRAM = myprogram.exe LOCAL_MCS_FLAGS = /r:System.Xml.dll BUILT_SOURCES = parser.cs CLEAN_FILES = y.output include ../build/executable.make parser.cs: parser.jay $(topdir)/jay/jay $< > $@ ======================================== 

execute.make將自動刪除'make clean'上的$(BUILT_SOURCES)文件。 由於這種情況是很常見的,並且jay恰好會留下y.output文件,因此您還可以定義一個名為$(CLEAN_FILES)的變量,該變量列出了在調用“ make clean”時要刪除的其他文件。 (這是可執行文件和內置源的補充)。


因此,cs-parser.cs正是以這種方式制作的:

[mono] ~/custom/MONO/mono/mcs/jay @ make
/usr/bin/make all-local
make[1]: Entering directory `/home/sehe/custom/MONO/mono/mcs/jay'
make[1]: Nothing to be done for `all-local'.
make[1]: Leaving directory `/home/sehe/custom/MONO/mono/mcs/jay'

[mono] ~/custom/MONO/mono/mcs/jay @ cd ../mcs

[mono] ~/custom/MONO/mono/mcs/mcs @ make
/usr/bin/make all-local
make[1]: Entering directory `/home/sehe/custom/MONO/mono/mcs/mcs'
./../jay/jay -cv < ./../jay/skeleton.cs cs-parser.jay > jay-tmp.out && mv jay-tmp.out cs-parser.cs
./../jay/jay: 9 shift/reduce conflicts.

(輸出減少)

結果導致cs-parser.cs中有10470行非用戶可服務的代碼


或者,開箱即用地思考:

  1. 只是一個想法,您可以不使用預處理c#-> c#轉換器嗎? 這還有其他好處,您可以使其與任何C#工具/編譯器一起使用。 考慮使用#line編譯指示映射回原始源以獲取調試信息

  2. 此外,還有許多針對C#/。NET的面向方面的代碼編織器。 您可能會結合使用1.2.獲得所需的功能?


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM