我怎样才能忽略 ANTLR4 中的某些文本?

How can I Ignore certain text in ANTLR4?

首先,提前感谢您的回答,这个问题让我很苦恼

  1. 我的第一个问题是如何忽略某些文本? 我想忽略文档中的某些文本,我有下一个文本:

我想忽略矩形包围的文本...当词法分析器找到 "demandante" 单词时它将停止忽略...

我用过这个语法

grammar A;

documento:((acciondemandante acciondemandado) | (acciondemandado acciondemandante));
acciondemandante: PALABRASDEMANDA informacionentidad+;
acciondemandado: PALABRASDEMANDADO informacionentidad+;
informacionentidad: nombres distancia? identificacion;
nombres: nombrenormal|nombremayuscula; 
nombrenormal: WORDCAPITALIZE WORDCAPITALIZE+;
nombremayuscula: WORDUPPER WORDUPPER+;
distancia: WORDLOWER;
identificacion: tipo indicador? INT+;
tipo: cedula | NIT;
cedula: CEDULA | LCASE_LETTER LCASE_LETTER | UCASE_LETTER UCASE_LETTER;
indicador: WORDCAPITALIZE | WORDLOWER;

CEDULA: 'cedula' | 'cc' | 'CC';
NIT: 'NIT' | 'nit';
PALABRASDEMANDADO: 'demandados' | 'demandado';
PALABRASDEMANDA: 'demandante' | 'demandantes';
WORDUPPER: UCASE_LETTER UCASE_LETTER+;
WORDLOWER: LCASE_LETTER LCASE_LETTER+;
WORDCAPITALIZE: UCASE_LETTER LCASE_LETTER+;
LCASE_LETTER: 'a'..'z' | 'ñ' | 'á' | 'é' | 'í' | 'ó' | 'ú';
UCASE_LETTER: 'A'..'Z' | 'Ñ' | 'Á' | 'É' | 'Í' | 'Ó' | 'Ú';
INT: DIGIT+;
DIGIT: '0'..'9';  
SPECIAL_CHAR: '.'  -> skip;
WS : [ \t\r\n]+ -> skip;
//ANY: ~[ ]+;

我试过一个技巧来跳过空格 WS : [ \t\r\n]+ -> skip; 然后忽略不是空格的东西 ANY : ~[ ]+; 但它不起作用,因为词法分析器从不识别任何标记...

我希望我的语法阅读什么

废话废话 demandado Julian Solarte c.c 120109321 废话废话

  1. 我的第二个问题是我遇到了 "mismatched input ''" 问题,为了解决这个问题,我添加了这条规则 "SKIPEND: EOF ->skip;" 但它不起作用...

非常感谢。

我解决这个问题的方法是 2 个步骤:

  1. 在输入流中查找关键字(此处demandado)。
  2. 让解析器从此位置开始解析,而不强制语法中输入的 EOF。它会在理解后尽可能地忽略所有它不理解的东西。

这将使您的语法更加简单,并且您将只获得相关输入的解析树。