2017-03-09 2 views
0

Ich habe wirklich einfach DSL in ANTLR wie folgt definiert.ANTLR wie man einen "Rest davon" Token

grammar Transformer; 
fragment Digit : [0-9]; 
Amp:'\''; 
Left:'('; 
Right: ')'; 
Comma: ','; 
Id: [A-Za-z][a-zA-Z0-9]+; 
Int: '-'? Digit+; 
WS: [\n\r\t]+ ->skip; 

FuncStart: '>'; 
DataStart: '#'; 


parse: (datainput | function)+; 
qoutedtext: Amp .*? Amp; 
datainput: DataStart Id; 
function: FuncStart Id Left param (Comma param)* Right; 
param: (datainput|function|qoutedtext|Int); 

Wenn dieser Text Parsen

#Id;>ToUpper(#Name);ThisShouldEndUpAsAToken>FillLeft(#EmpNo,20,'abc') 

Dies ist der "Baum" i erhalten: enter image description here

Der Baum sieht aus, als expecte, außer, dass ich nicht in der Lage bin, die ThisShouldEndUpAsAToken tekst zu fangen als ein Token. Ich weiß, dass ich keine Grammatikanalyse habe, die das jetzt tun sollte, aber ich bin nicht in der Lage, herauszufinden, wie es geht.

HEEELP :)

Antwort

0

Wie wäre Ihre parse Regel wie diese zu ändern.

parse: (datainput | function | Id)+;

(Ihr Testeingang mit ; gestreut wird, die nicht analysieren sollten Sie sicher sind, dass ist der Eingang, den Sie Parsing?)