Джей, моно C # компилятор и изменение грамматики - PullRequest
2 голосов
/ 30 октября 2011

Я пытаюсь настроить среду сборки для компилятора Mono C # на моем Mac.Целью является расширение грамматики для исследовательского проекта.Я изо всех сил пытаюсь настроить сборку.Я уверен, что ответ очень прост, но до сих пор я не могу найти какую-либо полезную информацию.

Я бы предпочел иметь решение в MonoDevelop, частью которого является грамматика, и где любые изменения вграмматика учитывается при компиляции проекта.

Файл решения, который я нашел, поскольку моя единственная отправная точка включает в себя файл cs-parser.cs, которого нет в исходной папке, которую я получилсо страниц проекта.Я предполагаю, что этот файл является результатом запуска генератора синтаксического анализа на cs-parser.jay, но я не могу найти информацию о том, как установить это как шаг сборки (или в этом отношении запуск генератора синтаксического анализатора вручную)

Ссылки на пошаговые руководства по работе с mcs приветствуются или просто шаг за шагом

1 Ответ

1 голос
/ 30 октября 2011

С README.makefiles :

Если ваша программа имеет «встроенные источники», то есть сгенерированные исходные файлы из других файлов (скажем, сгенерированных Джей), определить переменную с именем 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 $< > $@
========================================

executetable.make автоматически удалит файлы $ (BUILT_SOURCES) на «очистить». Так как эта ситуация является обычным явлением и сойка случается, оставляя позади файлы 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.

(уменьшенная мощность)

Это привело к появлению 10470 строк не обслуживаемого пользователем кода в cs-parser.cs


Альтернатива, нестандартное мышление:

  1. Просто мысль, разве вы не можете использовать преобработку конвертера c # -> c #? Это дает дополнительные преимущества, которые вы можете заставить работать с любым инструментом / компилятором C #. Подумайте об использовании #line прагм для сопоставления с исходным источником отладочной информации

  2. Кроме того, для C # /. NET существует ряд сторонников ориентированного кода. Вы можете использовать комбинацию 1. и 2. , чтобы получить желаемую функциональность?


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...