【发布时间】:2015-01-31 13:11:46
【问题描述】:
是否可以根据文本行的开始方式在词法分析器中输入模式?这是我正在解析的源代码:
1. Top Level item
1. Second level item #1
2. Second level item #2
因此,如果行以数字开头,后跟句点,我希望它进入 TOP_LEVEL 模式。但是,如果它以两个空格开头,然后是数字,后跟一个句点,那么我希望它沉入 SECOND_LEVEL 模式:
lexer grammar MyLexer;
TOP_LEVEL_ANCHOR: DIGIT+ PERIOD SPACE? ->pushMode(TOP_LEVEL);
SECOND_LEVEL_ANCHOR: SPACE SPACE DIGIT+ PERIOD SPACE ->pushMode(SECOND_LEVEL);
然而它总是捕捉到 TOP_LEVEL_ANCHOR。我是否以某种方式弄乱了空白的东西?我在词法分析器中没有 -> 跳过或隐藏通道之类的东西。剩下的:
PERIOD: '.';
SPACE: ' ';
NL: '\r'? '\n';
NON_QUOTED_STRING: [^a-zA-Z0-9] ~('\n' | '\r' | ',' )* ;
DOUBLE_QUOTED_STRING: '"' ~('\\'|'"')* '"' ;
源文档将有更多的风格,由行开头的模式来区分,所以想确保我正在挖掘正确的方向。是这样吗?
【问题讨论】: