问题:
最近在看“龙书”(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换行符的区别】