Gramática de estilo HTML / Markdown para ANTLR4

Quiero definir una gramática HTML / Markdown como para un documento que se transforma en un AST. Soy consciente de que ANTLR4 no es la mejor herramienta para hacer cosas de Markdown, pero estoy mucho más cerca de la dirección HTML. Al menos eso creo. :)

Aquí está mi definición lexer:

lexer grammar dnpMDLexer;

NL
    : [\r\n]
    ;

HEAD_TAG
    : '#'
    ;

HEADING_TEXT
    : ('\\#'|~[#`\r\n])+
    ;

ITALIC_TAG
    : '*'
    ;

ITALIC_TEXT
    : ('\\*'|~[#`*\r\n]).+?
    ;

LISTING_TAG
    : '`'
    ;

RUNNING_TEXT
    : ('\\#'|'\\`'|'\\*'|~[#*`])+
    ;

Y aquí está mi definición de analizador:

parser grammar dnpMDParser;

options { tokenVocab=dnpMDLexer; }

dnpMD
    : subheadline headline lead body
    ;

subheadline
    : HEAD_TAG HEAD_TAG HEADING_TEXT HEAD_TAG HEAD_TAG NL
    ;

headline
    : HEAD_TAG HEADING_TEXT HEAD_TAG NL
    ;

lead
    : HEAD_TAG HEAD_TAG HEAD_TAG HEADING_TEXT HEAD_TAG HEAD_TAG HEAD_TAG
    ;

subheading
    : HEAD_TAG HEAD_TAG HEAD_TAG HEAD_TAG HEADING_TEXT HEAD_TAG HEAD_TAG HEAD_TAG HEAD_TAG
    ;

listing
     : LISTING_TAG LISTING_TAG LISTING_TAG LISTING_TAG .+? LISTING_TAG LISTING_TAG LISTING_TAG LISTING_TAG
     ;

italic
    : ITALIC_TAG ITALIC_TEXT ITALIC_TAG
    ;

body
    : RUNNING_TEXT body
    | subheading body
    | listing body
    | italic body
    | EOF
    ;

Probé estas cosas en ANTLRworks2 e IntelliJ con el complemento ANTLR4.

Tengo grandes problemas con el listado y la regla cursiva. Forma coincidente con mucho en algunos casos y nada en otros. En la versión anterior, el estilo en cursiva no funciona.

¿Me dirijo en la dirección correcta? Traté de usar la gramática HTML como plantilla. ¿No está seguro de si los modos ANTLR4 podrían ayudarme a distinguir entre el texto externo y el texto interno de las etiquetas?

Quizás alguien tenga algunas pistas útiles. Estoy agradecido por cada pista que puedo obtener porque no estoy 100% seguro de que la forma en que estoy trabajando en este problema me lleve a la dirección correcta.

Aquí hay una imagen de TestRig dentro de ANTLRworks2. La segunda regla en cursiva coincide mucho.

Gracias fabian

Respuestas a la pregunta(1)

Su respuesta a la pregunta