Компилятор компилятор в C # - PullRequest
8 голосов
/ 14 июля 2009

Я ищу настраиваемый синтаксический анализатор и / или лексер, который может позволить мне создать пользовательскую проверку синтаксиса в C #. По сути, пользователь вводит код в строку кода (пользовательский), и средство проверки синтаксиса сможет ответить, правильно ли оно написано или нет.

Ответы [ 7 ]

8 голосов
/ 14 июля 2009

Вот несколько вещей, которые вы могли бы рассмотреть, используя:

8 голосов
/ 14 июля 2009

Это Ирония . Обязательно прочитайте обсуждение, потому что там много чего происходит. Используйте старую версию от ноября или самую последнюю, но затем убедитесь, что вы понимаете, что находится в этой версии, а что нет.

Для большинства вещей ноябрьский выпуск должен работать хорошо (используя его в любимом проекте).

Ирония позволяет построить абстрактное синтаксическое дерево (AST) из любой грамматики, которую вы можете определить непосредственно в коде C #. Он также поддерживает оценку (то есть интерпретацию кода), и даже нетрудно построить код из него. Или, ну, преобразуйте его в DLR (динамический язык Runtime) AST.

6 голосов
/ 14 июля 2009

Мне нравится ANTLR , , он поддерживает C # , а также Java, Python, C и т. Д. И т. Д. Плюсы использования ANTLR - очень хорошая документация (примеры, книги, учебные пособия, и т. д.) и широкое использование.

0 голосов
/ 03 ноября 2009

Я использую синтаксический анализатор с рекурсивным спуском, который сочетает в себе синтаксический анализ и лексизм, которые я написал с нуля в C #, в моем собственном языковом проекте. Я обнаружил, что это облегчает написание правил грамматики. Смотрите здесь для примера грамматики и смотрите здесь для модульных тестов .

0 голосов
/ 25 июля 2009

Я использую QWhale .NET Editor. Это не бесплатно, но это довольно хорошо.

0 голосов
/ 25 июля 2009

Если пользователь вводит строку кода, соответствующую традиционным выражениям, вы можете вручную написать для этого рекурсивный анализатор спуска за несколько часов и покончить с этим.

Если ваши входные данные представляют собой фрагмент сложного языка (например, вы хотите принять строку кода C #), вам потребуется гораздо более сильный анализатор, и рекомендуется использовать генератор синтаксического анализа.

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

0 голосов
/ 14 июля 2009

С здесь :

LINQPad использует ряд сторонних компоненты в пользовательском интерфейсе. Запрос редактор использует SyntaxEditor Actipro контроль (очень полированный продукт); "IntelliSense" функции полагаются на комбинация библиотек от Actipro Программное обеспечение и ICSharpCode (из Проект SharpDevelop).

Я не использовал ни одного из продуктов, упомянутых в этом отрывке (кроме LINQPad - который я очень рекомендую!), Но подумал, что это может начать двигать вас в правильном направлении.

...