как разбить код в теле метода на оператор по символам оператора / "токенам" - PullRequest
0 голосов
/ 22 апреля 2011

Я пишу что-то, что будет проверять функцию и переписывать эту функцию на другом языке, так что в основном, если внутри моей функции F1, у меня есть эта строка кода var x = ab (1) как мнеразбить тело функции на символы или "токены"?

Я искал и думал, что вещи в System.Reflection.MethodInfo.GetMethodBody справятся с задачей, однако этот класс, похоже, не в состоянииу меня есть возможность делать то, что я хочу ..

какие еще решения у нас есть?

Редактировать: Есть ли в любом случае мы можем получить "тело метода" метода, используя отражение?(например, как строка или что-то в этом роде)

Редактировать 2: в основном я пытаюсь написать программу на c # / vb, и когда я нажимаю F5 , функция сериализатора выполнит (использовать отражение и) взять всю программу (все классы в этой программе) и сериализовать ее в один файл javascript.конечно, у javascript нет библиотеки .net, поэтому в основном программа на C # / VB ограничит использование классов библиотекой .js (это библиотека, написанная на c # / vb, эмулирующая структуру объектов javascript).

Преимущество заключается в том, что у меня есть безопасность типов при кодировании моих классов JavaScript и много других преимуществ, таких как использование перегрузки и наличие классов / и т.д.Так как javascript не имеет классов / функций перегрузки изначально, он использует хаки, чтобы сделать это.так что в основном функция сериализатора напишет для меня javascript, основанный на входных данных программы C # / VB (вместе со всеми взломами и возможными оптимизациями).

Я пытаюсь кодировать это функция сериализатора

Ответы [ 4 ]

3 голосов
/ 22 апреля 2011

Если вы хотите сделать это, лучше всего будет проанализировать код C # / VB с помощью синтаксического анализатора / лексера, такого как Генератор синтаксического анализатора Gardens Point , flex / bison или ANTLR. затем на уровне токена соберите его с правильной грамматикой javascript. Есть несколько для C # и Java.

3 голосов
/ 22 апреля 2011

Звучит так, будто вы хотите дерево разбора, которое Reflection не даст вам.Взгляните на NRefactory , который является синтаксическим анализатором VB и C #.

2 голосов
/ 22 апреля 2011

См. Этот ответ на анализе и преобразовании исходного кода , а этот на переводе между языками программирования .

Они предполагают, что вы используете обычные методы компилятора для разбивки текста на токены («лексизация») и группировки связанных токенов в программные структуры («синтаксический анализ»).Если ваш анализ - это что-то иное, чем тривиальное, вам понадобится весь механизм, или он не будет надежным.

Отражение может дать вам только то, что разработчики языка решили дать вам.Они неизменно не дают вам деталей внутри функций.

1 голос
/ 22 апреля 2011

Если вы хотите перейти с IL на другой язык, это может быть проще, чем сначала разбирать исходный язык. Если вы хотите пойти по этому пути, подумайте о том, чтобы прочитать о проекте Microsoft «Вольта» (IL-> JavaScript), хотя проект больше не доступен, все еще есть старые блоги, обсуждающие проблемы вокруг него.

Обратите внимание, что одного отражения недостаточно - отражение дает вам байтовый массив для тела любого конкретного метода (MethodInfo.GetMethodBody.GetILAsByteArray - http://msdn.microsoft.com/en-us/library/system.reflection.methodbody.aspx), и вы должны прочитать его. Есть несколько общедоступных "IL" читатель "библиотеки.

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