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
                ;

Ответы на вопрос(1)

Ваш ответ на вопрос