antlr 生成词法分析器但不生成解析器
antlr generates lexer but not parser
我正在尝试使用 Antlr v4 为简单的自定义语法生成词法分析器和解析器。问题是,当我 运行 Antlr .jar 实用程序时,它会生成 Lexer 文件,但不会生成 Parser 文件,正如我认为的那样。
语法简单
// Define a grammar called Hello
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
Antlr 工具
遵循这些说明:https://github.com/antlr/antlr4/blob/master/doc/tool-options.md
。 Java工具可以从http://www.antlr.org/download/index.html
下载(我选择了antlr-4.7-complete.jar
)。
让我们生成词法分析器和解析器:antlr.jar -o outDir -Dlangage=JavaScript -visitor -listener test.g4
实际产量
- HelloLexer.js
- HelloLexer.tokens
期望输出
- HelloLexer.js
- HelloParser.js
- HelloListener.js
- HelloVisitor.js
我喜欢解析器,因为一旦我对输入进行了词法分析,我想解析并生成一棵树,然后我可以遍历它,如本教程所示:
var input = "your text to parse here"
var chars = new antlr4.InputStream(input);
var lexer = new MyGrammarLexer.MyGrammarLexer(chars);
var tokens = new antlr4.CommonTokenStream(lexer);
var parser = new MyGrammarParser.MyGrammarParser(tokens);
// ^ [!] notice here how I don't have an analogous "HelloParser.js" to run my tokens through!
parser.buildParseTrees = true;
var tree = parser.MyStartRule();
如何让Antlr工具生成我想要的HelloParser.js文件?现在它只生成词法分析器,我遵循的教程(上面的链接)没有关于我所处情况的任何详细信息。
问题已通过重试 Antlr 工具 (Java/.jar) 解决,但可以肯定 Windows 上的 CLASSPATH
设置正确。
根据 Getting started for Windows 文档,必须设置 CLASSPATH
环境变量以包含 Jar 文件的路径。我最初是使用 System Properties > Environment Variables
window 完成的,但由于某种原因它没有被注册(我重新检查了拼写错误,仍然没有发现任何问题)。
下次我 运行 手动命令 SET CLASSPATH=.;C:\Javalib\antlr-4.5.3-complete.jar;%CLASSPATH%
并且现在正在生成词法分析器 和 解析器。
所以问题是,如果 CLASSPATH
设置不正确,Java 工具会自动失败。没有任何警告或错误,很难诊断错误。
我正在尝试使用 Antlr v4 为简单的自定义语法生成词法分析器和解析器。问题是,当我 运行 Antlr .jar 实用程序时,它会生成 Lexer 文件,但不会生成 Parser 文件,正如我认为的那样。
语法简单
// Define a grammar called Hello
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
Antlr 工具
遵循这些说明:https://github.com/antlr/antlr4/blob/master/doc/tool-options.md
。 Java工具可以从http://www.antlr.org/download/index.html
下载(我选择了antlr-4.7-complete.jar
)。
让我们生成词法分析器和解析器:antlr.jar -o outDir -Dlangage=JavaScript -visitor -listener test.g4
实际产量
- HelloLexer.js
- HelloLexer.tokens
期望输出
- HelloLexer.js
- HelloParser.js
- HelloListener.js
- HelloVisitor.js
我喜欢解析器,因为一旦我对输入进行了词法分析,我想解析并生成一棵树,然后我可以遍历它,如本教程所示:
var input = "your text to parse here"
var chars = new antlr4.InputStream(input);
var lexer = new MyGrammarLexer.MyGrammarLexer(chars);
var tokens = new antlr4.CommonTokenStream(lexer);
var parser = new MyGrammarParser.MyGrammarParser(tokens);
// ^ [!] notice here how I don't have an analogous "HelloParser.js" to run my tokens through!
parser.buildParseTrees = true;
var tree = parser.MyStartRule();
如何让Antlr工具生成我想要的HelloParser.js文件?现在它只生成词法分析器,我遵循的教程(上面的链接)没有关于我所处情况的任何详细信息。
问题已通过重试 Antlr 工具 (Java/.jar) 解决,但可以肯定 Windows 上的 CLASSPATH
设置正确。
根据 Getting started for Windows 文档,必须设置 CLASSPATH
环境变量以包含 Jar 文件的路径。我最初是使用 System Properties > Environment Variables
window 完成的,但由于某种原因它没有被注册(我重新检查了拼写错误,仍然没有发现任何问题)。
下次我 运行 手动命令 SET CLASSPATH=.;C:\Javalib\antlr-4.5.3-complete.jar;%CLASSPATH%
并且现在正在生成词法分析器 和 解析器。
所以问题是,如果 CLASSPATH
设置不正确,Java 工具会自动失败。没有任何警告或错误,很难诊断错误。