【发布时间】:2016-02-04 10:59:37
【问题描述】:
我想创建一个语法,它将解析一个文本文件并根据可配置的“分段器”创建一个级别树。这是我到目前为止创建的,它有点工作,但是当“segmentor”出现在文本的开头时会停止。例如,文本“和位置”将无法解析。有任何想法吗?
另外,我很确定语法可以大大改进,所以欢迎任何建议。
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]+ ;
【问题讨论】:
-
这些分段器是否需要在运行时进行配置?如果是,我会使用解析器组合器,因为这些库非常灵活。
-
是的,我认为这将非常有用。你对 Java/Scala 有什么建议吗?