Я пытаюсь создать простую грамматику для анализа строки имени типа .Net, поддерживающей универсальные типы. Я признаю, что был совершенно новичком в построении грамматики на любом языке. Строка типа может выглядеть следующим образом.
Foo.Bar.Blah(Mom.Dad, Son.Daughter(Frank.Bob), Dog)
По сути, это рекурсивно. Ты должен это понять.
Я совсем в лесу с этим. Не знаю, с чего начать. То, что я построил сейчас, но на самом деле не работает, это следующее:
tree grammar XmlTypeName;
options {
language=CSharp2;
}
RPAREN
: '('
;
LPAREN
: ')'
;
SEP
: ','
;
TYPE
: ('a'..'z'|'A'..'Z'|'0'..'9'|'_')+
;
prog
: type;
type
: TYPE (RPAREN type (SEP type)? LPAREN)? (EOF)?
;
Это даже близко не работает. Antlr3.exe выдает ошибки о том, что RPARAM и LPARAM не разрешены в анализаторе дерева. Парсер дерева вообще то, что мне нужно?
Я хотел бы создать простой AST, который позволяет мне перемещаться по типам.