これはかなりシンプルなはずです。 私はANTLRを使ってレクサー文法に取り組んでおり、可変識別子の最大長を30文字に制限したいと考えています。私は( - 「」のものを除いて - 通常の正規表現次の構文)この行でこれを実現しようとした:コード生成中ANTLR正規表現の範囲限定子の構文
ID : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'){0,29} {System.out.println("IDENTIFIER FOUND.");}
;
エラーなし、しかし、コンパイルは単純だった生成されたコードの行のため失敗しました:
0,29
明らかANTLRは、括弧の間のテキストの部分を取って、印刷ラインと共に受け入れる状態の領域に置くれます。私はANTLRサイトを検索しましたが、同等の表現の例も参照も見つかりませんでした。 この式の構文はどのようにすべきですか?
ありがとうございました。 – user1634761
ANTLRがプログラミング言語のコンパイラを生成するためにのみ使用された場合、数量化のための使用はほとんどありません。しかし、あらゆる種類の構造化データを検証するための文法(スキーマ)が必要です。クレジットカード番号は13または25ではなく16桁です。ANTLR4の本はJSONとXMLの文法を持っていますが、基本的なトークン制約がないと、 JSONスキーマとXSDの抽象(コーデックに依存しない)バージョンとしてのANTLR文法。 – Dave
「最近、言語の識別子を制限する理由はほとんどありません」ということは、限定された識別子を持つ言語が存在しないことや、パーサーを書くことを望んでいないことを意味するわけではありません。 –