タグ付けされた質問 「antlr4」

5
ANTLR:簡単な例はありますか?
ANTLRを使い始めたいのですが、数時間かけて、 antlr.orgの確認しましたサイトで Javaプロセスの文法を明確に理解できません。 ANTLRで実装された4つの演算の計算機のように、パーサー定義を通過してJavaソースコードに至るまでの簡単な例はありますか?
230 java  antlr  antlr4  antlr3 


4
ANTLR4でのエラーの処理
パーサーが何をすべきかわからない場合のデフォルトの動作は、次のように端末にメッセージを出力することです。 1:23行目 '}'にDECIMALがありません これは良いメッセージですが、間違った場所にあります。例外としてこれを受け取りたいです。 を使用してみましBailErrorStrategyたParseCancellationExceptionが、メッセージなしでがスローされます(、によって引き起こされInputMismatchException、メッセージもありません)。 メッセージに有用な情報を保持しながら、例外を介してエラーを報告させる方法はありますか? 私が本当に求めているのは次のとおりです。通常、ルールでアクションを使用してオブジェクトを構築します。 dataspec returns [DataExtractor extractor] @init { DataExtractorBuilder builder = new DataExtractorBuilder(layout); } @after { $extractor = builder.create(); } : first=expr { builder.addAll($first.values); } (COMMA next=expr { builder.addAll($next.values); })* EOF ; expr returns [List<ValueExtractor> values] : a=atom { $values = Arrays.asList($a.val); } | fields=fieldrange …

3
カスタムDSLクエリのようなSQLをElasticSearchに変換しますか?
私たちは、antlr4を使用してMysqlに似た独自のクエリ言語を構築しています。を使用する場合を除いてwhere clause、つまり、ユーザーはselect/fromステートメントを入力しません。 文法を作成し、golangでレクサー/パーサー/リスナーを生成することができました。 文法ファイルEsDslQuery.g4の下: grammar EsDslQuery; options { language = Go; } query : leftBracket = '(' query rightBracket = ')' #bracketExp | leftQuery=query op=OR rightQuery=query #orLogicalExp | leftQuery=query op=AND rightQuery=query #andLogicalExp | propertyName=attrPath op=COMPARISON_OPERATOR propertyValue=attrValue #compareExp ; attrPath : ATTRNAME ('.' attrPath)? ; fragment ATTR_NAME_CHAR : '-' | '_' …

1
入れ子関数のビジターパターンを実装する方法
私はAntlrの初心者であり、Antlr4を使用して以下の実装を実行したかったのです。以下の機能を持っています。 1. FUNCTION.add(Integer a,Integer b) 2. FUNCTION.concat(String a,String b) 3. FUNCTION.mul(Integer a,Integer b) そして、私はこのような関数のメタデータを保存しています。 Map<String,String> map=new HashMap<>(); map.put("FUNCTION.add","Integer:Integer,Integer"); map.put("FUNCTION.concat","String:String,String"); map.put("FUNCTION.mul","Integer:Integer,Integer"); 、どこInteger:Integer,Integerを表すInteger戻り値の型があり、入力はaccesptsが機能しているだろうparamsはInteger,Integer。 入力がこのようなものである場合 FUNCTION.concat(Function.substring(String,Integer,Integer),String) or FUNCTION.concat(Function.substring("test",1,1),String) ビジター実装を使用して、マップに格納されている関数メタデータに対して入力が検証されるかどうかを確認したいと思いました。 以下は、私が使用しているレクサーとパーサーです。 レクサーMyFunctionsLexer.g4: lexer grammar MyFunctionsLexer; FUNCTION: 'FUNCTION'; NAME: [A-Za-z0-9]+; DOT: '.'; COMMA: ','; L_BRACKET: '('; R_BRACKET: ')'; パーサーMyFunctionsParser.g4: parser grammar MyFunctionsParser; options { tokenVocab=MyFunctionsLexer; …
8 java  antlr  antlr4 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.