Моя задача — создать грамматику ANTLR, проанализировать файлы исходного кода C# и сгенерировать иерархию классов. Затем я буду использовать его для создания диаграммы классов.
Я написал правила для разбора пространств имен, объявлений классов и объявлений методов. Теперь у меня проблема с пропуском тел методов. Мне не нужно их разбирать, потому что тела бесполезны в моей задаче.
Я написал простое правило:
body:
'{' .* '}'
;
но он не работает должным образом, когда метод выглядит так:
void foo()
{
...
{
...
}
...
}
правило соответствует первой фигурной скобке, что в порядке, затем соответствует
...
{
...
как «любой» (.*), а затем третья скобка в качестве последней скобки, что не в порядке, и правило заканчивается.
Кто-нибудь может помочь мне написать правильное правило для тел методов? Как я уже говорил, я не хочу их разбирать - только пропускать.
ОБНОВЛЕНИЕ:
вот решение моей проблемы, основанное на ответе Adam12
body:
'{' ( ~('{' | '}') | body)* '}'
;