【发布时间】:2013-11-04 22:57:48
【问题描述】:
在我的语法中,我有分配规则。它是形式
assignment: VAR_TYPE ID '=' expr;
在VAR_TYPE 我有一些硬编码的值,比如整数、字符串等。
我想知道的是如何匹配文件中声明的任何类名?
假设有人声明了class Foo 和Class Bar。如何将此标记为有效输入
不使用ID。因为如果我在VAR_TYPE 规则中添加|ID,ID 将永远不会
匹配,我不想要那个。
【问题讨论】:
-
为什么不使用
ID而不是VAR_TYPE开始呢?然后,您可以维护一个声明类型的可扩展容器(这是特定于语言的;在 C++ 中使用std::vector,在 Python 中使用list,在 C# 中使用System.Collecions.Generic.List)并使用它来跟踪,如果未知则抛出错误使用类型。 -
好的。所以你的建议是放弃 VAR_TYPE ?
-
差不多。这就是我通常做的,以避免过于复杂的事情。你用的是什么语言??
-
好的...理论上,您可以在运行时修改规则上下文。但是,我从未使用过 Java,所以我无法帮助您。而且,以防万一,这里是 Java 的列表实现:docs.oracle.com/javase/7/docs/api/java/util/List.html。
-
好的。感谢您的帮助!
标签: parsing antlr grammar lexical-analysis