对于那些不关注POJ(JVM上的Pascal)的人来说,它是一个编译器,将子集从Pascal转换为JASM(Java Assembly),以便我们可以使用JVM作为执行环境
在上一篇文章中,讨论了上下文(来自parser)和嵌套句子。在本出版物中,我们将讨论使用Pascal的read/readln函数从标准输入 (stdin) 读取数据所需的更改。
当我们为 JVM 进行编译时,有必要详细说明这个令人难以置信的虚拟机的各个点的功能。因此,我多次详细介绍 JVM 的内部工作原理以及它的一些指令(操作码)。
标准输入(stdin)是程序从中读取输入数据的流。到目前为止,我们仅支持stdout(标准输出)。
在这个commit中,实现了一个Java程序来了解JVM如何处理stdin:
当我们反汇编class文件时,我们得到下面的程序集。不相关的片段被省略,并且产生汇编的原始片段(Java)被插入了“;;”:
通过此示例,可以确定要从stdin读取数据,必须使用指令System.console().readLine()(第 11 行和第 16 行)。由于readLine()返回一个字符串,因此要读取数字,需要使用函数Integer.parseInt进行转换(第 17 行)。
也就是说,来自下面的 Pascal 程序:
POJ 已调整生成以下 JASM:
此提交实现了对 POJ 解析器的必要更改。
这是完整的 PR。
在下一篇文章中,我们将完成该项目的目标之一:递归计算阶乘。
包含项目完整代码和文档的存储库在这里。
以上是从标准输入(stdin)读取数据的详细内容。更多信息请关注PHP中文网其他相关文章!