我对ANTLR很新,并试图将自动递增的数字连接到我的解析器输出。我的语法如下所示。我定义了变量mtCount来存储我的增量值。该文件已成功解析,cpformat包含所有预期但mtCount的值未连接到输出。任何想法,我做错了什么?
grammar CP3;
@parser::members {
public int mtCount = 0;
}
file returns [String cpformat]
: 'type' t=type {$cpformat += $t.text;}
'variable' v=variable {$cpformat += $v.text;}
'rule' rs=rulestr {$cpformat += $rs.text;}
;
type returns [String cpformat]
: (dn=domname {$cpformat += $dn.text;}
'{' vv1=varval {$cpformat += $vv1.text;}
(',' vv2=varval {$cpformat += $vv2.text;} )* '};')*
;
variable returns [String cpformat]
: (dn=domname {$cpformat += $dn.text;}
vn=varname {$cpformat += $vn.text;} ';')*
;
rulestr returns [String cpformat]
: ('(' '('
mt1=minterm {$cpformat += $mt1.text + " mtCount: " + mtCount++;}
('||' mt2=minterm {$cpformat += $mt2.text + " mtCount: " + mtCount++;})*
')' ')' ';')*
;
minterm returns [String cpformat]
: '(' vn1=varname {$cpformat += $vn1.text;}
'==' vv1=varval {$cpformat += $vv1.text;}
('&&' vn2=varname {$cpformat += $vn2.text;}
'==' vv2=varval {$cpformat += $vv2.text;} )* ')'
;
domname returns [String cpformat]
: str1=STRING {$cpformat = $str1.text;}
;
varname returns [String cpformat]
: str2=STRING {$cpformat = $str2.text;}
;
varval returns [String cpformat]
: str3=STRING {$cpformat = $str3.text;}
;
STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'_')+ ;
WS : ( ' ' | '\t' | '\r' | '\n' )+ {skip();} ;
在输出中都没有看到mtCount及其值。整个输出有点冗长,但是我发送了下面的一部分,它应该出现在输出的这一部分中,例如:
dom97var97;dom98var98;dom99var99;dom100var100;dom101var101;
((
在这里,我会期待它。
(var1==S64&&var3==M9&&var81==BVM5&&var94==EU93&&var95==CRIT1870CC&&var96==CRIT095CV&&var99==JC5&&var100==CRIT784&&var101==F8Q)
||(var1==S64&&var3==M9&&var81==BVM5&&var94==EU93&&var95==CRIT1870CC&&var96==CRIT095CV&&var99==JC5&&var100==CRIT786&&var101==F8Q)
||(var1==S64&&var3==MA&&var81==BVM5&&var94==EU96&&var95==CRIT1870CC&&var96==CRIT065CV&&var99==JB1&&var100==CRIT620&&var101==F8Q)
||(var1==S64&&var3==MA&&var81==BVM5&&var94==EU96&&var95==CRIT1870CC&&var96==CRIT065CV&&var99==JB1&&var100==CRIT624&&var101==F8Q)
|| ...