Herança de gramáticas

A secção de import implementa um mecanismo de herança entre gramáticas.

Por exemplo as gramáticas:

grammar ELang;
stat: (expr ';')* EOF;
expr: INT;
INT: [0-9]+;
WS: [ \r\t\n]+ -> skip;
grammar MyELang;
import ELang;
expr: INT | ID;
ID: [a-z]+;

Geram a gramática MyELang equivalente:

grammar MyELang ;
stat : (expr ’;’ )+ EOF ;
expr : INT | ID ;
ID : [a-z]+ ;
INT : [0-9]+ ;
WS : [ \r\t\n]+ -> skip ;

Isto é, as regras são herdadas, excepto quando são redefinidas na gramática descendente.

Este mecanismo permite herança múltipla:

Note-se a importância na ordem dos imports na gramática Nested.

A regra r vem da gramática G3 e não da gramática G2.

Last updated