2

Mac で Mono C# コンパイラのビルド環境をセットアップしようとしています。目的は、研究プロジェクトのために文法を拡張することです。ビルドのセットアップに苦労しました。答えは非常に簡単だと確信していますが、これまでのところ、有用な情報を見つけることができません.

文法が一部であり、プロジェクトのコンパイル時に文法への変更が考慮されるMonoDevelopのソリューションを希望します。

私が唯一の出発点として見つけたソリューション ファイルには、プロジェクト ページから取得したソース ドロップには存在しない cs-parser.cs ファイルが含まれています。このファイルは、cs-parser.jay でパーサー ジェネレーターを実行した結果であると推測していますが、これをビルド ステップとして設定する方法に関する情報を見つけることができません (または、パーサー ジェネレーターを手動で実行する方法について)。

mcs の操作方法に関するウォークスルー チュートリアルへのリンクを歓迎するか、簡単なステップバイステップ

4

1 に答える 1

1

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 $< > $@
========================================

executable.make は、'make clean' で $(BUILT_SOURCES) ファイルを自動的に削除します。この状況はよくあることであり、jay はたまたま y.output ファイルを置き去りにするため、'make clean' が呼び出されたときに削除される余分なファイルをリストする $(CLEAN_FILES) という変数を定義することもできます。(これは、実行可能ファイルとビルドされたソースに追加されます)。


そのため、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.の組み合わせを利用して、必要な機能を取得できますか?


于 2011-10-30T12:41:53.970 に答える