Как я могу игнорировать определенный текст в ANTLR4? - PullRequest
0 голосов
/ 15 ноября 2018

прежде всего, заранее спасибо за ответ, эта проблема убивает меня

  1. Мой первый вопрос: как игнорировать определенный текст? Я хочу игнорировать определенный текст из моего документа, у меня есть следующий текст:

text

И я хочу игнорировать текст, заключенный в прямоугольник ... когда лексер найдет слово "requireante", которое он перестанет игнорировать ...

Я использовал эту грамматику

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: ~ [] +; Но это не работает, потому что лексер никогда не распознает ЛЮБОЙ токен ...

Что бы я хотел прочитать в моей грамматике

фигня фигня требование Джулиан Соларте c.c 120109321 фигня фигня

  1. Моя вторая проблема заключается в том, что я получаю проблему "несоответствующий ввод", и для решения этой проблемы я добавляю это правило "SKIPEND: EOF -> skip;" но это не работает ...

Спасибо большое.

1 Ответ

0 голосов
/ 15 ноября 2018

Мой подход к этой проблеме будет состоять из 2 шагов:

  1. Найти ключевое слово во входном потоке (здесь demandado ).
  2. Позволяет анализатору анализироватьиз этой позиции без форсирования EOF для ввода в грамматику.Он пойдет как можно дальше, игнорируя все, что не понимает, после того, что было понято.

Это значительно упростит вашу грамматику, и вы получите дерево разбора только для соответствующего ввода.

...