antlr 生成词法分析器,但不生成解析器



我正在尝试使用 Antlr v4 为简单的自定义语法生成词法分析和解析器。问题是,当我运行Antlr .jar实用程序时,它会生成一个词法分析器文件,但也不会生成解析器文件,我认为它应该这样做。

简单的语法

// 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 : [ trn]+ -> skip ; // skip spaces, tabs, newlines

安特尔工具
按照以下说明进行操作: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

实际输出

  • 你好雷克瑟.js
  • HelloLexer.tokens

期望的输出

  • 你好雷克瑟.js
  • 你好解析器.js
  • 您好听众.js
  • 您好访客.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();

https://github.com/antlr/antlr4/blob/master/doc/javascript-target.md#how-do-i-run-the-generated-lexer-andor-parser

如何获得Antlr工具来生成我想要的HelloParser.js文件?现在它只生成词法分析器,我遵循的教程(上面的链接(没有关于我所处情况的任何详细信息。

通过重试Antlr工具(Java/.jar(解决了这个问题,但是特别确定Windows上的CLASSPATH设置正确。

在 Windows 入门文档之后,必须将CLASSPATH环境变量设置为包含 Jar 文件的路径。我最初使用System Properties > Environment Variables窗口执行此操作,但由于某种原因它没有被注册(我已经重新检查了拼写错误,但仍然没有发现任何问题(。

下次我手动运行命令SET CLASSPATH=.;C:Javalibantlr-4.5.3-complete.jar;%CLASSPATH%,现在正在生成词法分析和解析器。

所以问题是,如果CLASSPATH设置不正确,Java 工具就会静默失败。没有任何警告或错误,很难诊断错误。

相关内容

  • 没有找到相关文章

最新更新