J'ai essayé de construire une fonction: concat('A','B') OR concat('A',9)
AntLR4: construire une fonction
Voici une grammaire exemple je l'ai écrit:
LPAREN : '(' ;
RPAREN : ')' ;
FUNCTIONNAME : 'CONCAT' ;
ARGUMENTS : TEXT (',' TEXT)* ;
TEXT : ('a'..'z' | '0'..'9' | 'A'..'Z')+;
allFunction : FUNCTIONNAME LPAREN ARGUMENTS (',' ARGUMENTS)* RPAREN ;
Mais pas en mesure de construire un arbre correctement.
Update1:
Voici l'arbre:
0 null
-- 11 CONCAT
-- 4 (
-- 13 2,5
-- 5)
et la grammaire:
allFunction : FUNCTIONNAME LPAREN ARGUMENTS RPAREN;
Update2:
Grammaire:
allfunction : COMMA | FUNCTIONNAME LPAREN ARGUMENTS (COMMA ARGUMENTS)* RPAREN ;
sortie Parsed:
CONCAT (A, B, C)
[@0,0:5='CONCAT',<8>,1:0]
[@1,6:6='(',<1>,1:6]
[@2,7:11='A,B,C',<9>,1:7]
[@3,12:12=')',<2>,1:12]
[@4,13:14='\n\n',<7>,1:13]
[@5,15:14='<EOF>',<-1>,3:0]
Update3:
Je suis Tring pour construire une fonction: CONCAT(TEXT,TEXT)
- (Entrée limitée à 2 paramètres). Cela fonctionne bien. J'ai mis en œuvre la fonction IF: IF(TEXT,TEXT,TEXT)
- Cela fonctionne également très bien.
Le problème est, Je dois le modifier à: IF(BOOLEAN,INT,INT)
- Mais avec la grammaire existante pour tout paramètre dans IF, il peut accepter UNSIGNED_INT y compris le premier paramètre.
Grammaire:
Voici le lien: https://ufile.io/undqs ou https://files.fm/u/7c44aaee
S'il vous plaît donner un exemple de l'entrée que vous souhaitez analyser. "pas capable" n'aide pas beaucoup. Quelles erreurs avez-vous? Quels jetons sont produits avec 'grun allFunction -tokens -diagnostics '? –
BernardK
@BernardK Impossible de définir Concat comme élément racine. De plus, 2,5 devrait être différent. – Bond
Vous avez le même problème avec ARGUMENTS qu'avec STRUCTURE_SELECTOR dans [link] (https://stackoverflow.com/questions/46256834/how-to-make-antlr4-fully-tokenize-terminal-nodes/46258041#46258041). Et encore une fois, quel est le fichier d'entrée, Tree est l'entrée ou la sortie que vous voulez construire? – BernardK