陈中正的网络日志

Windows下运行 龙书 附录代码报错问题

问题:

最近在看“龙书”(Compilers Principles, Techniques and Tools)

Windows下编译附录A的代码,没有报错,

然而当尝试运行编译器

<span style="font-size:14px;">java main.Main <test</span>

却总是报错:

<span style="font-size:14px;">Exception in thread "main" java.lang.Error: near line 1: syntax error
at parser.Parser.error(Parser.java:15)
at parser.Parser.match(Parser.java:19)
at parser.Parser.assign(Parser.java:116)
at parser.Parser.stmt(Parser.java:110)
at parser.Parser.stmts(Parser.java:62)
at parser.Parser.block(Parser.java:30)
at parser.Parser.program(Parser.java:23)
at main.Main.main(Main.java:9)</span>

解决:

尝试了各种方法,都没有解决问题。

万般无奈下在Linux下编译运行了一下,结果居然没有报错!

可见以后Unix环境下的程序,还是老老实实在Linux下编译运行的好~!

原因分析:

然后我闲的蛋疼,多花了近两个小时,找出了出错的原因。

<span style="font-size:14px;">Unix系统里,每行结尾只有“<换行>”,即“\n”;
Windows系统里面,每行结尾是“ <回车><换行>”,即“\r\n”;
Mac系统里,每行结尾是“<回车>”。</span>

"龙书"中的源码只处理Unix系统眼中的“换行”,

Windows系统下相比于Unix多了一个“回车”,

这就导致编译器无法处理,进而出错了。

拓展阅读:

回车符和换行符区别【Windows和Linux换行符的区别】

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/24517609

« nslookup手动模拟DNS递归查询 C中 char *s 和 char s[] 有什么区别? »