如何使用词法分析器谓词来测试名称列表?

How to use lexer predicates to test against list of names?

我有一个 AvailableCommands 哈希集成员。它在 lexing/parsing 从外部源开始之前加载了名称。我如何检查集合中是否存在当前 CMD 令牌?

类似于:

CMD : [-_.0-9a-zA-Z]+ {AvailableCommands.Contains(/* what goes here? */);}?
    -> mode(IN_CMD)
    ;

我想在词法分析器中执行此操作,因为它是上下文相关的:命令 lexed/parsed 不同于变量。

匹配词法分析器规则构造一个在Lexer._token中可用的Token。

CMD : [-_.0-9a-zA-Z]+ {AvailableCommands.Contains(_token.getText());}?
    -> mode(IN_CMD)
    ;

Antlr documentation 说的很清楚。