У меня есть язык с дополнительными предложениями (CL1
, CL2
).
правило грамматики:
func : FUNC ID "(" (CL1 (ID | CL11 ID))? ")" (CL2 (ID | CL21 ID))? EOS ;
Из-за необязательности я даже не могу использовать getChild(i).getText()
, так как «i» становится недетерминированным c.
При генерации кода мне нужно выбрать ID
после CL1
или CL2
.
Если у меня нет индекса CL1
, у меня его нет для ID
, который следует за ним.
function fnFoo () meni attrBar ;
будет иметь другие позиции токенов по сравнению с
function fnFoo (arg pBar) meni attrBar ;
Я использовал другой подход:
a. сначала определяется, существует ли токен этого типа ctx.getTokens(LangParser.CL1)[0]
или ctx.CL1()
b. выбирая свой токенIndex ctx.CL1().getSymbol().tokenIndex
c. продвижение tokenIndex + 1
к следующему местоположению ID
Но на данный момент я понимаю, что этот tokenIndex
не тот индекс, который используется в getChild(i)
API.
И нет API для выберите текст токена, используя tokenIndex
для начала.
Как бы справиться с этой ситуацией?
ps: Я использую среду выполнения nodejs с посетителями, используя ANTLR 4.8