我正在为一些类似Java的语言做一个简单的解析器(仅用于学习目的)。我无法确定一个语句是否是一个变量声明。这可能是我的词法分析器出现的一个问题(这实在很sl))。如果词法分析器看到一些文本,就会将其标记为标识符,即使该文本是关键字或类型。解析器会告诉他们这些工作。我怎样才能区分一些标识符和一个变量声明?
这在目前的工作,但现在我试图解析变量声明,像这样的一个位置:
int x = 3;
问题是我不知道如何来确定这是否是一个变量声明。如果我只看了第一令牌,并发现它的“标识符”,并没有告诉我任何事情,因为这行代码还与标识符开头:
System.out.print("hi");
而且像这样的语句被处理解析器的另一部分。
我想过的另一个解决方案是检查第一个标记是否是一个类型。例如,我可能有一个类似于如下的方法:
boolean isType(String t) {
if(t.equals("int") ||
t.equals("long") ||
t.equals("char") ||
/* et cetera */)
return true;
else return false;
}
这样做的问题是它只允许一组特定的类型。由于我的小语言被编译为Java字节码,因此我需要它将任意类识别为类型。
所以我的问题是:是否有可能确定一个语句是否是变量声明或不知道所有可能的变量类型?
您可能会感到乐观,并且_hope_ Java代码符合样式指南,在这种情况下,类名将全部使用首字母大写。至少这是最简单的情况。 – 2012-08-08 19:33:49
可能吗?是的,还有什么看起来像是一个单词后跟一个空格,后跟另一个单词,后面跟着一个等号? 需要?可能不是,java本身在编译时就知道所有类型,如果你尝试编译一个未知类型的文件,它会给你错误 – 2012-08-08 19:34:16
如果你有两个标识符跟在另一个之后,它还能是什么? – Qnan 2012-08-08 19:36:16