在ANTLR中将运行编号附加到解析器输出

时间:2014-03-17 12:39:09

标签: concatenation antlr

我对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)
|| ...

0 个答案:

没有答案