有一段时间我对ANTLR无法解析以下上下文无关语法规则的事实很感兴趣:S→'x'S'x'| 'X'.
这对我来说似乎并不复杂.
据我所知,ANTLR是最强大的LL解析器.是否有其他类型的解析器生成器(LR或其他)能够为此生成解析器?
GR,
科恩
网络上是否有现有的可用主机文件语法?
我在http://www.antlr.org/grammar/list上查看了列表,但我没有在那里找到它。
我还检查了 Wikipedia 中的 hosts 文件条目,它引用了RFC 952,但我认为这与 /windows/system32/drivers/etc/hosts 使用的格式不同。
任何语法格式都比没有好,但我更喜欢 ANTLR 格式的格式。这是我第一次使用任何语法生成器,我想保持较低的学习曲线。我已经计划使用 ANTLR 来使用其他文件。
我试图运行Python/cminus示例.从http://pypi.python.org/pypi/stringtemplate3/3.1,我为python安装了stringtemplate3 sudo python setup.py install.
当我运行以此代码开头的cminus.py时.
import sys
import antlr3
import stringtemplate3
Run Code Online (Sandbox Code Playgroud)
我有错误.
Traceback (most recent call last):
File "cminus.py", line 3, in <module>
import stringtemplate3
File "/Library/Python/2.7/site-packages/stringtemplate3/__init__.py", line 14, in <module>
from stringtemplate3.templates import *
File "/Library/Python/2.7/site-packages/stringtemplate3/templates.py", line 35, in <module>
import antlr
ImportError: No module named antlr
Run Code Online (Sandbox Code Playgroud)
看起来stringtemplate3使用的是antlr而不是antlr3.
我该如何解决这个问题?
我正在尝试使用antlr4解析SQL的一个简单子集.
我的语法看起来像这样:
grammar Query;
query : select;
select : 'select' colname (',' colname)* 'from' tablename;
colname : COLNAME;
tablename : TABLENAME;
COLNAME: [a-z]+ ;
TABLENAME : [a-z]+;
WS : [ \t\n\r]+ -> skip ; // skip spaces, tabs, newlines
Run Code Online (Sandbox Code Playgroud)
我用一个简单的java应用程序测试它,如下所示:
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
public class Test {
public static void main(String[] args) throws Exception {
// create a CharStream that reads from standard input
InputStream is = new ByteArrayInputStream("select one,two ,three from table".getBytes());
ANTLRInputStream input …Run Code Online (Sandbox Code Playgroud) 我正在构建一个语法ANTLR4,我收到了这个警告
TL4.g4:224:12: greedy block ()* contains wildcard; the non-greedy syntax ()*? may be preferred
这是它所指的代码行
block
: ( statement | functionDecl )* (Return expression ';')?
;
Run Code Online (Sandbox Code Playgroud)
警告意味着什么,我该如何纠正?
我在处理 ANTLR 4 中的语义谓词时遇到了麻烦。我的语法在句法上有歧义,需要提前一个标记来解决歧义。
例如,我想将“2012 年 1 月 19 日至晚上 9 点”解析为日期“2012 年 1 月 19 日”,将解析器的下一个标记留在“直到”。我想将“Jan 19, 7 to 9 pm”解析为日期“Jan.19”,解析器的下一个标记为“7”。
所以我需要查看第三个令牌,然后要么接受要么离开。
我的语法片段是:
date
: month d=INTEGER { isYear(getCurrentToken().getText())}? y=INTEGER
{//handle date, use $y for year}
| month d=INTEGER {//handle date, use 2013 for year}
;
Run Code Online (Sandbox Code Playgroud)
当解析器在任一示例输入上运行时,我收到以下消息:
line 1:9 rule date failed predicate: { isYear(getCurrentToken().getText())}?
Run Code Online (Sandbox Code Playgroud)
它永远不会到达第二个规则替代方案,因为(我猜)它已经读取了一个额外的标记。
有人可以告诉我如何做到这一点吗?
我只能找到这个(https://github.com/rollxx/vim-antlr),但它是为版本3制作的.有谁知道我在哪里可以找到版本4的正确语法?
我尝试使用build xml配置antlr和netbeans,我遵循http://wiki.netbeans.org/AntlrInNetBeansJavaApplication 教程,但是当我清理并构建项目时,我得到一个错误,如
错误:无法找到或加载主类org.antlr.Tool
我设置了类路径:SET CLASSPATH =.; c:\ Users\BayDebrecen\Downloads\antlr-4.2.2-complete.jar;%CLASSPATH%
我的构建xml:
<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)
构建,测试和运行项目MyAntlrProject.
<target name="-pre-compile" depends="antlr">
</target>
<target name="init-antlr">
<!-- Full path to Antlr jar -->
<property name="antlr.jar" location="c:\\Users\\BayDebrecen\\Downloads\\antlr-4.2-complete.jar"/>
<!-- Grammar path -->
<property name="antlr.grammar" location="src\\myantlrproject\\MyGrammar.g"/>
</target>
<target name="antlr" depends="init-antlr" unless="up-to-date">
<!-- Compiling grammar -->
<java classname="org.antlr.Tool" fork="true">
<arg value="${antlr.grammar}"/>
<classpath path="${antlr.jar}"/>
</java>
</target>
Run Code Online (Sandbox Code Playgroud)
如何正确编译和运行我生成的类?
我创建了antlr4语法文件“ Jay.g4”,并生成了“ JayLexer.java”和“ JayParser.java”,并通过编译创建了“ JayLexer.class”和“ JayParser.class”。问题是:如何在Java中使用生成的源?我使用NetBeans IDE,但我不知道如何将词法分析器和解析器集成到我的项目中,并使它们正常工作。
是否可以取消分配/重置/压缩由 ANTLR 分配的内存?
我已经使用了ParserATNSimulator.clearDFA(),但仍然分配了一些巨大的对象(例如ArrayPredictionContext,,SingletonPredictionContext)。
我的程序交替解析和计算阶段。在两个解析阶段之间,我想减少 ANTLR 的内存占用。
antlr ×10
antlr4 ×5
grammar ×2
parsing ×2
antlr3 ×1
generator ×1
greedy ×1
hosts-file ×1
java ×1
memory-leaks ×1
netbeans ×1
python ×1
regex ×1
text-parsing ×1
vim ×1