Я хочу создать грамматику, которая будет анализировать текстовый файл и создавать дерево уровней в соответствии с настраиваемыми «сегментаторами». Это то, что я создал до сих пор, это своего рода работа, но остановится, когда в начале текста появится «segmentor». Например, текст «и местоположение» не будет разбираться. Есть идеи?ANTLR-грамматика для многоуровневой текстовой сегментации
Кроме того, я вполне уверен, что грамматика может быть значительно улучшена, поэтому любые предложения приветствуются.
grammar DocSegmentor;
@header {
package segmentor.antlr;
}
// PARSER RULES
levelOne: (levelTwo LEVEL1_SEG*)+ ;
levelTwo: (levelThree+ LEVEL2_SEG?)+ ;
levelThree: (levelFour+ LEVEL3_SEG?)+ ;
levelFour: (levelFive+ LEVEL4_SEG?)+ ;
levelFive: tokens;
tokens: (DELIM | PAREN | TEXT | WS)+ ;
// LEXER RULES
LEVEL1_SEG : '\r'? '\n'| EOF ;
LEVEL2_SEG : '.' ;
LEVEL3_SEG : ',' ;
LEVEL4_SEG : 'and' | 'or' ;
DELIM : '`' | '"' | ';' | '/' | ':' | '’' | '‘' | '=' | '?' | '-' | '_';
PAREN : '(' | ')' | '[' | ']' | '{' | '}' ;
TEXT : (('a'..'z') | ('A'..'Z') | ('0'..'9'))+ ;
WS : [ \t]+ ;
Необходимо ли, чтобы эти сегменты были настроены во время выполнения? Если да, я бы пошел с комбинатором парсера, поскольку эти библиотеки очень гибкие. – bash0r
Да, я думаю, это было бы очень полезно. У вас есть предложения по Java/Scala? – spyk