2017-03-09 1 views
0

J'ai vraiment simple DSL défini dans ANTLR comme ceci.ANTLR comment créer un jeton "reste de celui-ci"

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); 

Lors de l'analyse de ce texte

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

Ceci est le « arbre » je reçois: enter image description here

L'arbre semble que attendues d', sauf que je ne suis pas en mesure de prendre le tekst ThisShouldEndUpAsAToken en tant que jeton. Je sais que je n'ai aucune analyse dans le grammer qui devrait le faire maintenant, mais je ne suis pas capable de comprendre comment le faire.

HEEELP :)

Répondre

0

Que diriez-vous de changer votre règle parse comme ceci:.

parse: (datainput | function | Id)+;

(Votre entrée de test est saupoudré ; qui ne devrait pas analyser Êtes-vous sûr que c'est l'entrée que vous 'est l'analyse?)