Я планирую написать компилятор С# 3.0 на С#. Где взять грамматику для генерации парсера?
Желательно тот, который работает с ANTLR v3 без модификации.
Я планирую написать компилятор С# 3.0 на С#. Где взять грамматику для генерации парсера?
Желательно тот, который работает с ANTLR v3 без модификации.
Взгляните на Спецификация языка C#. В главе Б. Грамматика, вы найдете грамматику.
Я столкнулся с грамматикой ANTLR C# на CodePlex. Это относительно новый проект, использующий ANTLR 3.2. В нем говорится, что он поддерживает C # 4.0 и находится под лицензией Eclipse Public License (EPL).
Я немного поиграл с ним. У него есть куча тестовых файлов, содержащих выражения. Он поддерживает лямбда-выражения, небезопасный контекст... как и следовало ожидать. Он анализирует файл C# и предоставляет вам абстрактное синтаксическое дерево. Вы можете делать с ним все, что хотите.
Вы ищете что-то вроде этого или это?
Также см. вопрос по грамматике C# ANLTR.
(a**
и не знать, будет ли это в конечном итоге выражением, подобным (a**b)
(т.е. умножить a
на результат разыменования b
), или лямбда выражение (a** b) =>
, пока не нажмете =>
. Поскольку нет ограничений на количество косвенных обращений (указатель на указатель на...), мне кажется, что это LL(). Но поскольку ANTLR3 поддерживает опцию LL(*), это не проблема.
- person Pavel Minaev; 13.10.2009