标签: antlr

是否有一个解析器生成器能够生成一个解析器,可以解析它:S→'x'S'x'| 'X'

有一段时间我对ANTLR无法解析以下上下文无关语法规则的事实很感兴趣:S→'x'S'x'| 'X'.

这对我来说似乎并不复杂.

据我所知,ANTLR是最强大的LL解析器.是否有其他类型的解析器生成器(LR或其他)能够为此生成解析器?

GR,

科恩

parsing antlr generator

3
推荐指数
1
解决办法
166
查看次数

主机文件 ANTLR 语法

网络上是否有现有的可用主机文件语法?

我在http://www.antlr.org/grammar/list上查看了列表,但我没有在那里找到它。

我还检查了 Wikipedia 中的 hosts 文件条目,它引用了RFC 952,但我认为这与 /windows/system32/drivers/etc/hosts 使用的格式不同。

任何语法格式都比没有好,但我更喜欢 ANTLR 格式的格式。这是我第一次使用任何语法生成器,我想保持较低的学习曲线。我已经计划使用 ANTLR 来使用其他文件。

grammar antlr hosts-file

3
推荐指数
1
解决办法
1133
查看次数

为python安装stringtemplate3

我试图运行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.

我该如何解决这个问题?

python antlr stringtemplate

3
推荐指数
1
解决办法
1362
查看次数

简单的antlr4语法中的输入错误不匹配

我正在尝试使用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)

antlr antlr4

3
推荐指数
1
解决办法
4846
查看次数

greedy block()*包含通配符

我正在构建一个语法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)

警告意味着什么,我该如何纠正?

regex grammar antlr greedy antlr4

3
推荐指数
1
解决办法
1323
查看次数

ANTLR4 谓词失败忽略以下替代方案?

我在处理 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)

它永远不会到达第二个规则替代方案,因为(我猜)它已经读取了一个额外的标记。

有人可以告诉我如何做到这一点吗?

parsing antlr text-parsing antlr4

3
推荐指数
1
解决办法
877
查看次数

有没有ANTLR4 vim语法文件?

我只能找到这个(https://github.com/rollxx/vim-antlr),但它是为版本3制作的.有谁知道我在哪里可以找到版本4的正确语法?

vim antlr

3
推荐指数
1
解决办法
1799
查看次数

ANTLR netbeans config无法找到或加载主类org.antlr.Tool

我尝试使用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)

如何正确编译和运行我生成的类?

netbeans antlr netbeans-plugins antlr3 antlr4

3
推荐指数
1
解决办法
3416
查看次数

如何使用antlr生成的解析器和lexer?

我创建了antlr4语法文件“ Jay.g4”,并生成了“ JayLexer.java”和“ JayParser.java”,并通过编译创建了“ JayLexer.class”和“ JayParser.class”。问题是:如何在Java中使用生成的源?我使用NetBeans IDE,但我不知道如何将词法分析器和解析器集成到我的项目中,并使它们正常工作。

java antlr

3
推荐指数
1
解决办法
3504
查看次数

ANTLR4 内存清理

是否可以取消分配/重置/压缩由 ANTLR 分配的内存?

我已经使用了ParserATNSimulator.clearDFA(),但仍然分配了一些巨大的对象(例如ArrayPredictionContext,,SingletonPredictionContext)。

我的程序交替解析和计算阶段。在两个解析阶段之间,我想减少 ANTLR 的内存占用。

memory-leaks antlr antlr4

3
推荐指数
1
解决办法
1446
查看次数