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 行のユーザーがサービスを提供できないコードが発生しました。
代わりに、箱から出して考える:
念のため、前処理のc#→c#コンバーターは使えないのでしょうか?これには、任意の C# ツール/コンパイラで動作させることができるという追加の利点があります。プラグマを使用し#line
てデバッグ情報を元のソースにマップすることを検討してください。
また、C#/.NET 用のアスペクト指向コード ウィーバーも多数あります。1.と2.の組み合わせを利用して、必要な機能を取得できますか?