我正在尝试使用ANTLRV4为一个简单的自定义语法生成一个lexer和解析器。问题是,当我运行Antlr.jar实用程序时,它生成了一个Lexer文件,而不是一个解析器文件,我认为它应该生成。
简单语法
// 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
所需输出
我想要解析器,因为一旦我将输入进行了lexed处理,我想要解析并生成一个树,然后我可以遍历它,如本教程所示:
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文件?现在它只是生成Lexer,我所遵循的教程(上面的链接)没有任何关于我所处情况的细节。
通过重试Antlr工具(java/.jar)解决了这个问题,但必须确保Windows上的类路径
设置正确。
在Windows文档入门之后,必须将classpath
环境变量设置为包括Jar文件的路径。我最初使用System Properties>Environment Variables
窗口执行此操作,但由于某种原因没有注册(我重新检查了错别字,但仍然没有发现任何问题)。
下一次,我手动运行命令set classpath=.;C:\javalib\antlr-4.5.3-complete.jar;%classpath%
,现在将生成lexer和解析器。
所以问题是,如果classpath
设置不正确,则Java工具会自动失败。在没有任何警告或错误的情况下,很难诊断错误。
从这里使用Lexer和解析器: https://raw.githubusercontent.com/antlr/grammars-v4/master/java/JavaLexer.g4 https://raw.githubusercontent.com/antlr/grammars-v4/master/java/JavaParser.g4 使用antlr-4.6生成Python3目标 antlr-
我有一个简单的HelloWorld。g4语法(见底部)。我能够成功生成<代码>。py文件使用: 现在我想使用带有标志的来生成解析树GUI。我安装了ANTRL Python运行时()。我可以打开一个Python解释器并键入: 并且解释器识别 模块。 当我像这样运行< code>TestRig时: 我收到此错误消息: 从我的调查中,我发现了几篇列出相同错误消息的帖子。但是,在这些情况下,他们忘记在类路
这里是背景,我试图创建一个DSL,让客户写简单的脚本查询到我们的mongodb为基础的数据库。我选择antlr来实现DSL。 null 那么antlrers,你认为哪一个是我作为一个antlr新手应该走的路?你能列出每种方法的优点和缺点吗?或者你有其他方法可以推荐?
我对ANTLR和ANTLRWorks还不熟悉,所以我对这一点很困惑:我正在使用ANTLRWorks 2.1创建语法,并随后创建词法分析器和解析器(Java目标)。然后,我创建了一个小型Eclipse项目,并从AntlWorks导入了ANTLR4 JAR,以手动调用lexer和解析器,如ANTLR书籍示例中所述。运行应用程序时,我会遇到以下异常: 但是,当在ANTLRWorks TestRig中运行
关于警告: 我尝试在不使用的情况下构建它。它构建了相同的
我使用ANTLR Version4创建编译器。第一阶段是Lexer部分。我创建了“compilerlexer.g4”文件,并在其中输入了lexer规则。 compilerlexer.g4: null 有几十个这样的警告和错误。病因是什么? 一般问题:使用组合语法和单独使用lexer和parser有什么不同?如何连接单独的语法和lexer文件?