/ / Умовне правило перезапису - antlr

Умовне правило перезапису - antlr

Візьміть наступне псевдо-правило:

rule: prefix? rest;

Я хотів би переписати AST на основі появи префікса.

Якщо немає префікса, я хотів би його переписати як rest.

Якщо є префікс, я хотів би його переписати як (PARENT prefix rest)

PARENT
-prefix
-rest

Іншими словами, я хочу, щоб маркер з'явився в AST, якщо знайдено 0 або 1 альтернативу.

[Як] це можливо?

Відповіді:

1 для відповіді № 1

Розділіть його двома окремими альтернативами:

rule
: prefix rest -> ^(PARENT prefix rest)
| rest        -> rest
;