をビルドします。AntLR4:私は機能を構築しようとしてきた機能
LPAREN : '(' ;
RPAREN : ')' ;
FUNCTIONNAME : 'CONCAT' ;
ARGUMENTS : TEXT (',' TEXT)* ;
TEXT : ('a'..'z' | '0'..'9' | 'A'..'Z')+;
allFunction : FUNCTIONNAME LPAREN ARGUMENTS (',' ARGUMENTS)* RPAREN ;
ではなく、適切にツリーを構築することができ:concat('A','B') OR concat('A',9)
は、ここで私が書いたサンプル文法です。
アップデート1:ここ
ツリーです:
0 null
-- 11 CONCAT
-- 4 (
-- 13 2,5
-- 5)
と文法:
allFunction : FUNCTIONNAME LPAREN ARGUMENTS RPAREN;
アップデート2:
文法:
allfunction : COMMA | FUNCTIONNAME LPAREN ARGUMENTS (COMMA ARGUMENTS)* RPAREN ;
解析さ出力:
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と:
Iは、関数を構築するトリングされている: CONCAT(TEXT,TEXT)
- (入力は2つのパラメータに制限されています)。これは正常に動作します。 IF関数を実装しました:IF(TEXT,TEXT,TEXT)
- これも正常に動作します。しかし、IFでの任意のパラメータのための既存の文法と、それは最初のパラメータを含むUNSIGNED_INTを受け入れることができます - IF(BOOLEAN,INT,INT)
:
問題は、私はそれを変更する必要があり、 です。
文法:
ここでは、リンクです: https://ufile.io/undqsかhttps://files.fm/u/7c44aaee
あなたが解析したい入力の例を教えてください。 "できない"はあまり役に立たない。どのエラーがありますか?どのようなトークンが 'grun allFunction -tokens -diagnostics 'で生成されますか? –
BernardK
@BernardK Concatをルート要素として設定できません。また、2,5は異なるノードでなければなりません。 – Bond
あなたはARGUMENTSと同じ問題をSTRUCTURE_SELECTORと[link](https://stackoverflow.com/questions/46256834/how-to-make-antlr4-fully-tokenize-terminal-nodes/46258041#46258041)に記載しています。そしてまた、入力ファイルは何ですか、ツリーは入力ですか、作成する出力ですか? – BernardK