我正在为一些类似 Java 的语言制作一个简单的解析器(仅用于学习目的)。我无法确定语句是否是变量声明。这可能是我的词法分析器的问题(这真的很草率)。如果词法分析器看到一些文本,它只是将其标记为标识符,即使该文本是关键字或类型。将它们区分开来的工作交给了解析器。
到目前为止,这已经奏效,但现在我正在尝试解析变量声明,就像这里的这个:
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 字节码,因此我需要它来将任意类识别为类型。
所以我的问题是:是否可以在不知道所有可能的变量类型的情况下确定语句是否是变量声明?