2012-01-08 50 views
2

我正在为Java语言的一个子集编写一个编译器,并且在编写扫描器期间,我想知道如何识别不是原始类型,而是来自库的类型。例如,在Java语言中,String类型不是原始的。一般来说,我如何从库中识别出新的类型作为“关键字”,而不用提前知道它们。谢谢!从库中识别新类型

+0

我误解了。基于语法,类型将在源中具有已知位置。 – 2012-01-08 19:46:05

回答

4

尝试通过http://www.antlr.org/grammar/1152141644268/Java.g(注意type声明及其用法) - 它会给你一些见解。

简而言之,当你解析源代码时,你知道你希望看到一个类型,在字段和方法中的修饰符之后,在正式参数列表中的参数名称之前,等等。当你知道String是某些类型,您可以使用import表格检查以获取全名,并在类路径中查找实际的类。

现在,正如巴特在评论(现在删除)中提到的那样,真正的决议发生在管道后面。在解析阶段,您只创建一个节点,说您有一个type这是一个Identifier这是String所以现在的答案是,“你不知道”。

更新:尝试以下this thesis,它应该帮助你。

+0

@alf当你说import table时,你是指该源代码文件中所有导入的列表。另外,当你说“然后去类路径中找到实际的类”,这是否意味着去那个目录,并检查天气存在一个与类型(类)名称相同的名称的文件名,如果它确实存在,那么它已验证?谢谢 – 2012-01-08 19:59:10

+0

@MikeG是的,我愿意;不,你不要马上去目录:你有[使用的一系列资源](http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html#搜索)。 – alf 2012-01-08 20:38:30

+0

@MikeG添加了“分布式Java编译器:实现和评估”论文的链接。它对标准Java编译器也有适当的介绍(对于当前的问题,它是第12页)。 – alf 2012-01-09 00:15:40