Как я могу импортировать пространства имен (например, используя System.Linq) в Anltr4 / C # - PullRequest
0 голосов
/ 13 октября 2018

Я создал простой .g4 (Antlr4) файл грамматики и лексера.

Он прекрасно генерирует мой код лексера / анализатора.Но после добавления некоторого пользовательского кода, требующего расширений Linq, теперь мне нужно получить пользовательский оператор "using System.Linq;" , вставленный в начало моего сгенерированного файла кода лексера.

ЯПомните, что есть несколько вариантов внедрения кода (из файла .g4), например,

@lexer::members {
     ... {custom lexer code goes here}

Может кто-нибудь указать мне правильный (.g4) синтаксис, который сделает необходимые операторы "using" вобработанный лексер / парсер.

ОБНОВЛЕНИЕ: LexLi высказал хорошую мысль .. зачем мне это?Я должен написать свой код в посетителя или слушателя. Ответ на этот вопрос: Я пытаюсь реализовать токены INDENT и DEDENT в C # (аналог Java-кода, размещенного здесь под "ANTLR4": ANTLR Какой самый простой способ реализовать Python как зависимый от отступаграмматика?

Спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

Вы можете контролировать то, что записывается в ваш файл классическим способом,

@parser::header
{
#pragma warning disable 3001, 3003, 3005, 3009, 1591 
}

@lexer::header
{
#pragma warning disable 3001, 3003, 3005, 3009, 1591 
}

@parser::namespace { Lextm.Namespace }
@lexer::namespace { Lextm.Namespace }

@parser::footer
{
#pragma warning restore 3001, 3003, 3005, 3009, 1591 
}

@lexer::footer
{
#pragma warning restore 3001, 3003, 3005, 3009, 1591 
}

Так что в вашем случае добавьте оператор using в заголовок.

...