Node.js SyntaxError: Unexpected identifier 'boolean' in ANTLR4 JavaScript Lexer
Node.js SyntaxError: Unexpected identifier 'boolean' in ANTLR4 JavaScript Lexer
Node.js版本:
jj5@orac:~/test/antlr4-js$ node --version
v5.10.1
Java版本:
jj5@orac:~/test/antlr4-js$ java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)
ANTLR4 版本:
jj5@orac:~/test/antlr4-js$ java -jar ./antlr-4.5.3-complete.jar | head -n 1
ANTLR Parser Generator Version 4.5.3
我的测试脚本:
jj5@orac:~/test/antlr4-js$ cat run.sh
#!/bin/bash
cd "`dirname [=13=]`"
rm ECMAScript????* 2>/dev/null
export CLASSPATH=".:`pwd`/antlr-4.5.3-complete.jar"
java -jar ./antlr-4.5.3-complete.jar -Dlanguage=JavaScript -visitor ECMAScript.g4
node antlr4/run.js
错误发生在最后一行 node antlr4/run.js
,其中 Node.js 运行 run.js:
jj5@orac:~/test/antlr4-js$ ./run.sh
[irrelevant warnings elided]
/home/jj5/repo/svn/pcrepo/jj5-test/antlr4-js/ECMAScriptLexer.js:881
private boolean strictMode = true;
^^^^^^^
SyntaxError: Unexpected identifier
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Module.require (module.js:367:17)
at require (internal/module.js:16:19)
at Object.<anonymous> (/home/jj5/repo/svn/pcrepo/jj5-test/antlr4-js/antlr4/run.js:2:1)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
所以 ANTLR4 似乎生成了一些 "strong typed" Java 脚本和 Node.js 阻塞。我该如何解决这个问题..?
注意:如果您安装了 Node.js 和 Java,您可以像这样重现:
cd /tmp
svn co https://www.progclub.org/svn/pcrepo/jj5-test/trunk/antlr4-js/
antlr4-js/run.sh
问题是因为我使用的 ECMAScript.g4 语法是为 Java 而设计的,而不是 JavaScript。我创建了一个新文件来支持Java脚本,你可以得到详细信息here。
Node.js版本:
jj5@orac:~/test/antlr4-js$ node --version
v5.10.1
Java版本:
jj5@orac:~/test/antlr4-js$ java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)
ANTLR4 版本:
jj5@orac:~/test/antlr4-js$ java -jar ./antlr-4.5.3-complete.jar | head -n 1
ANTLR Parser Generator Version 4.5.3
我的测试脚本:
jj5@orac:~/test/antlr4-js$ cat run.sh
#!/bin/bash
cd "`dirname [=13=]`"
rm ECMAScript????* 2>/dev/null
export CLASSPATH=".:`pwd`/antlr-4.5.3-complete.jar"
java -jar ./antlr-4.5.3-complete.jar -Dlanguage=JavaScript -visitor ECMAScript.g4
node antlr4/run.js
错误发生在最后一行 node antlr4/run.js
,其中 Node.js 运行 run.js:
jj5@orac:~/test/antlr4-js$ ./run.sh
[irrelevant warnings elided]
/home/jj5/repo/svn/pcrepo/jj5-test/antlr4-js/ECMAScriptLexer.js:881
private boolean strictMode = true;
^^^^^^^
SyntaxError: Unexpected identifier
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Module.require (module.js:367:17)
at require (internal/module.js:16:19)
at Object.<anonymous> (/home/jj5/repo/svn/pcrepo/jj5-test/antlr4-js/antlr4/run.js:2:1)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
所以 ANTLR4 似乎生成了一些 "strong typed" Java 脚本和 Node.js 阻塞。我该如何解决这个问题..?
注意:如果您安装了 Node.js 和 Java,您可以像这样重现:
cd /tmp
svn co https://www.progclub.org/svn/pcrepo/jj5-test/trunk/antlr4-js/
antlr4-js/run.sh
问题是因为我使用的 ECMAScript.g4 语法是为 Java 而设计的,而不是 JavaScript。我创建了一个新文件来支持Java脚本,你可以得到详细信息here。