ANTLR 4 грамматика синтаксического анализатора
Как я могу улучшить мою грамматику синтаксического анализатора так, чтобы вместо создания AST, который содержит паруdecFunc
правила для моего кода тестирования. Это создаст только один иsum
становится вторым корнем. Я пытался решить эту проблему несколькими разными способами, но всегда получаю левую рекурсивную ошибку. Это мой тестовый код:
f :: [Int] -> [Int] -> [Int]
f x y = zipWith (sum) x y
sum :: [Int] -> [Int]
sum a = foldr(+) a
Это моя грамматика: это изображение, которое имеет дваdecFunc
по этой ссылкеhttp://postimg.org/image/w5goph9b7/
prog : stat+;
stat : decFunc | impFunc ;
decFunc : ID '::' formalType ( ARROW formalType )* NL impFunc
;
anotherFunc : ID+;
formalType : 'Int' | '[' formalType ']' ;
impFunc : ID+ '=' hr NL
;
hr : 'map' '(' ID* ')' ID*
| 'zipWith' '(' ('*' |'/' |'+' |'-') ')' ID+ | 'zipWith' '(' anotherFunc ')' ID+
| 'foldr' '(' ('*' |'/' |'+' |'-') ')' ID+
| hr op=('*'| '/' | '.&.' | 'xor' ) hr | DIGIT
| 'shiftL' hr hr | 'shiftR' hr hr
| hr op=('+'| '-') hr | DIGIT
| '(' hr ')'
| ID '(' ID* ')'
| ID
;