ANTLRでトークンフラグメントを定義しようとしています。これは、Unicodeの範囲からの文字のシーケンスである!
と~
、それは空白または任意の区切り文字を含めることはできません。
fragment RegularCharRange : '\u0021'..'\u007e' ;
fragment WhitespaceChar : [\u0000\t\n\f\r ] ;
fragment DelimiterChar : [()<>[\]{}/%] ;
以下は無効なANTLR構文ですが、私がやろうとしていることを表しています。
fragment RegularChar : RegularCharRange & ~WhitespaceChar & ~DelimiterChar ;
定義すると、フラグメントは次のように使用されます。
Name : '/' RegularChar* ;
RegularChar
ユニコード範囲のリストとしての定義に頼らずに、小さなレクサー文法の読みやすさを維持するためのルールを構築するにはどうすればよいですか(これにより、空白文字と区切り文字のそれぞれの順序を学習して、それらが収まるようにする必要があります)前述の範囲内の正しい場所)?
編集:私はこのような正しい動作を達成できることを知っていますが、再利用可能なフラグメントからレクサールールを構築しようとしています:
fragment RegularChar
: ~( '\u0000'..'\u0020' | '\u007f'..'\uffff' | [\u0000\t\n\f\r ] | [()<>[\]{}/%] )
;
いいえ、残念ながらここには近道はありません。範囲を個別に定義するか、EDITで行ったように否定します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加