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

/** * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/ /* var disqus_config = function () { this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable }; */ (function() { // DON'T EDIT BELOW THIS LINE var d = document, s = d.createElement('script'); s.src = 'https://chenzz.disqus.com/embed.js'; s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })();