ANTLR 匹配除

发布于 2024-11-30 02:28:44 字数 149 浏览 2 评论 0原文

除了特定的令牌之外,还有什么方法可以匹配 antlr 中的令牌吗?

我有一条规则,规定 '_' 可以是 ID。现在我有一个特定的情况,我想匹配一个 ID,但在这种特殊情况下,我希望它忽略 '_' 替代方案。是否可以?

Is there any way to match a token in antlr except a specific one?

I have a rule which states that a '_' can be an ID. Now I have a specific situation in which I want to match an ID, but in this particular case I want it to ignore the '_' alternative. Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

芯好空 2024-12-07 02:28:44

我认为

(ID {!$ID.text.equals("_")}?)

应该这样做(如果您使用 Java 作为目标语言)。否则,您将必须以您的方式编写语义谓词语言能够理解它。

简而言之,这将检查文本是否不等于“_”,然后子规则才会匹配。

另一种可能的方法是:

id: ID
  | '_'
  ;

ID: // lexer rule to match every valid identifier EXCEPT '_' ;

这样,每当您指的是“'_'或任何其他 ID”时,您都可以使用 id 来匹配它,如果您不允许“_”,则可以使用 _

I think something like

(ID {!$ID.text.equals("_")}?)

should do it (if you are using Java as target language). Otherwise you will have to write that semantic predicate in a way that your language understands it.

In short, this will check whether the text does not equal "_" and only then will the subrule match.

Another possible way to do this:

id: ID
  | '_'
  ;

ID: // lexer rule to match every valid identifier EXCEPT '_' ;

That way, whenever you mean "either '_' or any other ID", you use id to match this, if you disallow "_", you can use _.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文