使用ANTLR进行解析时忽略输入的某些部分

使用ANTLR进行解析时忽略输入的某些部分,antlr,antlr3,information-extraction,Antlr,Antlr3,Information Extraction,我正试图用ANTLR解析一种语言(ANTLRWorks-3.5.2)。目标是输入完整的输入,但Antlr给出语法中已定义部分的解析树,并忽略其余输入,例如,这是我的语法: grammar asap; project : '/begin PROJECT' name module+ '/end PROJECT'; module : '/begin MODULE'name '/end MODULE'; name : IDENT ; IDENT : (

我正试图用ANTLR解析一种语言(ANTLRWorks-3.5.2)。目标是输入完整的输入,但Antlr给出语法中已定义部分的解析树,并忽略其余输入,例如,这是我的语法:

grammar asap;
project : '/begin PROJECT' name  module+ '/end PROJECT';    
module : '/begin MODULE'name '/end MODULE'; 
name :   IDENT ;              
IDENT :     ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'.'|':'|'-')*;
给定输入:

/begin PROJECT HybridSailboat_2 
/begin MODULE engine

/begin A2ML
/include XCP_common_v1_0.aml
"XCP" struct {      
taggedstruct Common_Parameters ;
};
/end A2ML

/end MODULE
/end PROJECT
关于这个输入,我只希望解析树包含项目和模块,而不是A2ML部分。 在antlr中是否可能忽略输入的某些部分?
我可以指定语法中不重要部分的起点和终点吗?

只需将
A2ML
部分匹配为lexer中的单个标记,然后
skip()
它:

grammar asap;

project
 : BEGIN_PROJECT name module* END_PROJECT EOF
 ;

module
 : BEGIN_MODULE name END_MODULE
 ;

name
 :   IDENT
 ;  

IDENT
 : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'.'|':'|'-')*
 ;

BEGIN_PROJECT
 : '/begin' S 'PROJECT'
 ;

END_PROJECT
 : '/end' S 'PROJECT'
 ;

BEGIN_MODULE
 : '/begin' S 'MODULE'
 ;

END_MODULE
 : '/end' S 'MODULE'
 ;

A2ML
 : '/begin' S 'A2ML' .* '/end' S 'A2ML' {skip();}
 ;

SPACES
 : S {skip();}
 ;

fragment S
 : (' ' | '\t' | '\r' | '\n')+
 ;