パーサー ルールは小文字で始まり、レクサー ルールは大文字で始まります。AST として出力すると、パーサー ルール内の個々のトークンが個別のノードになるため、variableルールをパーサー ルールではなくレクサー ルールにする必要があります。
Variable : '$' CamelCaseIdentifier;
CamelCaseIdentifier : ('a'..'z') Identifier*;
Identifier : ('a'..'z' | 'A' .. 'Z' | '0'..'9')+;
しかし、このようにすると、入力123456は としてトークン化されますがIdentifier、これはおそらくあなたが望むものではありません。さらに、Identifierルールの名前はAlphaNum. また、フラグメントルールを作成すると、レクサーがそれ自体でトークンを生成せず、他のレクサールール (ルールなど) に対してAlphaNumのみ 's を使用するようになります。に一致するルールも必要な場合は、次のようにします。AlphaNumCamelCaseIdentifierIdentifier
Variable : '$' (CamelCaseIdentifier | Identifier);
CamelCaseIdentifier : 'a'..'z' AlphaNum*;
Identifier : 'A'..'Z' AlphaNum*;
// a fragment rule can't be used inside parser rules, only in lexer rules
fragment AlphaNum : 'a'..'z' | 'A' .. 'Z' | '0'..'9';