我正在为Java语言的一个子集编写一个编译器,并且在编写扫描器期间,我想知道如何识别不是原始类型,而是来自库的类型。例如,在Java语言中,String类型不是原始的。一般来说,我如何从库中识别出新的类型作为“关键字”,而不用提前知道它们。谢谢!从库中识别新类型
从库中识别新类型
回答
尝试通过http://www.antlr.org/grammar/1152141644268/Java.g(注意type
声明及其用法) - 它会给你一些见解。
简而言之,当你解析源代码时,你知道你希望看到一个类型,在字段和方法中的修饰符之后,在正式参数列表中的参数名称之前,等等。当你知道String
是某些类型,您可以使用import
表格检查以获取全名,并在类路径中查找实际的类。
现在,正如巴特在评论(现在删除)中提到的那样,真正的决议发生在管道后面。在解析阶段,您只创建一个节点,说您有一个type
这是一个Identifier
这是String
。所以现在的答案是,“你不知道”。
更新:尝试以下this thesis,它应该帮助你。
@alf当你说import table时,你是指该源代码文件中所有导入的列表。另外,当你说“然后去类路径中找到实际的类”,这是否意味着去那个目录,并检查天气存在一个与类型(类)名称相同的名称的文件名,如果它确实存在,那么它已验证?谢谢 – 2012-01-08 19:59:10
@MikeG是的,我愿意;不,你不要马上去目录:你有[使用的一系列资源](http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html#搜索)。 – alf 2012-01-08 20:38:30
@MikeG添加了“分布式Java编译器:实现和评估”论文的链接。它对标准Java编译器也有适当的介绍(对于当前的问题,它是第12页)。 – alf 2012-01-09 00:15:40
- 1. ExpressJS识别文件类型
- 2. 无法识别的类型
- 3. 识别滚动的类型
- 4. 识别哈希类型
- 5. 如何识别泛型类?
- 6. 未识别Json类型
- 7. 识别噪音类型
- 8. Java库类未识别?
- 9. 从另一种方法/类中识别android intent类型?
- 10. Visual Studio不识别新类
- 11. 识别Windows中的文件类型
- 12. 识别模板中的基元类型
- 13. 无法识别数据库中的数据类型nvarchar
- 14. 如何从url字符串中识别数据类型?
- 15. 如何从内容中识别二进制压缩类型?
- 16. 如何从任何文本中识别字体类型
- 17. 如何从文件中识别数据类型
- 18. 识别新行
- 19. cakephp 3. *不识别新数据库列
- 20. 字典不能识别密钥类型(更新)
- 21. QT Creator无法识别新项目的STL类型
- 22. LINQ到数据:聪明类型识别
- 23. SharePoint如何识别文件类型?
- 24. 以编程方式识别PDF类型
- 25. 确定(识别)dc.js图表类型
- 26. 如何识别儿童输入类型
- 27. 物体识别/图像分类模型
- 28. ndk-r7无法识别va_list类型
- 29. JdbcTemplate如何识别数据类型?
- 30. C++ Boost多索引类型识别
我误解了。基于语法,类型将在源中具有已知位置。 – 2012-01-08 19:46:05