Вот грамматика, которую я использовал. Действие после согласования правила «Func» вызывается 12 раз для входной строки, если (diff («col»)) вместо 2 раз.Грамматика соответствует правилу функции больше необходимого количества раз
Отладка Я понял, что переменная привязки $ currPos возвращается при анализе правила Eq. Я не могу понять, точное поведение
Main = Eq
Eq = (Ar (('equal'i/'>='/'<='/'<>'/'!='/'<'/'>'/'=') Ar))
/Ar ('equal'i/'>='/'<='/'<>'/'!='/'<'/'>'/'=')
/Ar
Ar = (Mul (('+'/'-') Mul)*) ('+'/'-')?
Mul = (Ex (('*'/'/'/'%'/'^') Ex)*) ('*'/'/'/'%'/'^')?
Ex = __ ('-'__ Main/'(' __ Main __ ')'/Func/Lit) __ /'-'
Func = __ id (('('__ Main __')')/'('__')') __ {
console.log(text());
}
Lit = (col/charLit/numLit)
/id:id
charLit "character" = string:$("'"[^']*"'")
numLit "number" = $([0-9.]+)
col "column" = col:$('"'[^"]*'"')
id "identifier" = $([a-zA-Z][a-zA-Z0-9_]*)
__ "space" = [ \t\n]*
Да я понял. спасибо –