标签: antlr

C#ANTLR语法?

我正在寻找C#的交钥匙ANTLR语法,它生成一个可用的抽象语法树(AST),并且是后端语言不可知或目标C#,C,C++或D.

它不需要支持错误报告.

PS我不愿意做任何修复,因为替代方案并不是很难.

c# antlr

10
推荐指数
2
解决办法
4158
查看次数

是否存在R的现有ANTLR或IRONY语法?

有谁知道R是否存在现有的ANTLR或IRONY语法?

非常感谢.

grammar antlr r irony antlr4

10
推荐指数
1
解决办法
2008
查看次数

Antlr4中语义谓词的语法

什么是ANTLR3中的"语义谓词"?Bart Kiers非常清楚地概述了Antlr3中的不同语义谓词.

太糟糕了,Antlr4中的语法/语义似乎有所改变,所以这不会编译:

end_of_statement
    :   ';'
    |   EOF
    |   {input.LT(1).getType() == RBRACE}? =>
    ;

RBRACE
    : '}'
    ;
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何处理end_of_statement的第三种情况:如果下一个标记是'}'但不消耗它,则接受.

antlr antlr4

10
推荐指数
1
解决办法
5313
查看次数

解析维基媒体标记 - 基于EBNF的解析器是不是很适合?

我试图解析(在Java中)维基百科上的Wikiimedia标记.有许多现有的包用于此任务,但我没有发现任何特别适合我的需求.我使用过的最好的软件包是Mathclipse Bliki解析器,它在大多数页面上都做得不错.

但是,此解析器不完整,无法解析某些页面或无法正确解析其他页面.可悲的是,代码相当混乱,因此修复此解析引擎中的问题非常耗时且容易出错.

在尝试找到一个更好的解析引擎时,我已经研究过使用基于EBNF的解析器来完成这项任务(特别是ANTLR).经过一些尝试后,似乎这种方法并不特别适合这项任务,因为维基媒体标记相对宽松,因此不能轻易地融入结构化语法.

我对ANTLR和类似解析器的经验非常有限,因此可能是我的经验不足导致问题,而不是这样的解析器天生就不适合这项任务.任何对这些话题有更多经验的人都可以在这里说点吗?

@Stobor:我已经提到我已经查看了各种解析引擎,包括谷歌查询返回的引擎.到目前为止我发现的最好的是Bliki引擎.问题是修复这些解析器的问题变得非常繁琐,因为它们本质上都是条件和正则表达式的长链,导致意大利面条代码.我正在寻找更类似于EBNF解析方法的东西,因为该方法更清晰,更简洁,因此更容易理解和发展.我已经看过你发布的mediawiki链接,似乎证实了我怀疑开箱即用的EBNF不适合这个任务.因此,我正在寻找一个像EBNF一样清晰易懂的解析引擎,但也能够处理wiki标记的混乱语法.

java parsing antlr ebnf wikitext

9
推荐指数
1
解决办法
1318
查看次数

开始使用ANTLR并避免常见错误

我已经开始学习ANTLR并拥有2007年的书"The Definitive ANTLR Reference"和ANTLRWorks(一种用于创建语法的交互式工具).而且,作为那种人,我从第3章开始.("快速游览不耐烦").

这是一个相当痛苦的过程,特别是因为一些错误是相当难以理解的(例如ANTLR:"缺少对规则范围的属性访问"问题,这对我来说意味着"你有错误").另外,我有一些非常简单的语法(仅限3-4个制作)和简单的输入(2行),在运行时会出现"OutOfMemory"错误.

ANTLR网站很有用,但有点零散,一些SO用户已经评论(/sf/ask/19493631/)本书和教程期望高入门级别.因此,我一直不愿意接近ANTLR讨论列表.

以后我们开始掌握它.拥有可以轻柔扩展的简单可靠的示例将是有用的.这当然值得掌握,因为我们根据ANTLR改造了很多我们的想法.

一个问题是ANTLR V3与V2有显着的变化.SO(以及ANTLR页面)上的一个答案是指不再可用的V2语法.

一些关于SO的ANTLR问题给了我很多帮助,但找到它们有点特别.所以我想知道SO用户如何帮助减少学习过程中的痛苦.(如果您参考参考书,那么指向特定页面会很有用).

编辑.@duffymo和@JamesAnderson已经确认ANTLR很难 - 主要是因为解析器很难.(FWIW我已经通过LEX/YACC等,毫无疑问,ANTLR更强大,更容易使用.)我认为有可能避免结垢的区域仍然是有用的,例如:

  • 确保变量名称的大写正确
  • 将包名添加到词法分析器和解析器
  • 注意规则的顺序,因为它会影响优先级

而且更多这些将是有用的.

antlr

9
推荐指数
2
解决办法
3604
查看次数

ANTLR Parser带有手动词法分析器

我正在将基于C#的编程语言编译器从手动词法分析器/解析器迁移到Antlr.

Antlr一直给我带来严重的头痛,因为它通常大部分都有效,但是有些小部件没有,而且难以解决.

我发现我的大部分头痛都是由Antlr的词法分析器部分引起的,而不是解析器引起的.然后我注意到parser grammar X;并意识到也许我可以手动编写lexer,然后是Antlr生成的解析器.

所以我正在寻找关于这个主题的更多文档.我想自定义ITokenStream可以工作,但似乎几乎没有关于这个主题的在线文档...

c# antlr parser-generator lexer

9
推荐指数
1
解决办法
1480
查看次数

使用ANTLR进行Java源文件的静态分析

有没有人有一个完整的实现(可能是github或googlecode)来使用ANTLR语法文件和Java源代码来分析Java源代码.例如,我想简单地计算变量,方法等的数量.

还使用了最新版本的ANTLR.

java antlr

9
推荐指数
1
解决办法
2508
查看次数

antlr匹配任何字符除外

我有以下片段的定义:

fragment CHAR   :'a'..'z'|'A'..'Z'|'\n'|'\t'|'\\'|EOF;  
Run Code Online (Sandbox Code Playgroud)

现在我必须为字符串定义词法分析器规则.我做了以下事情:

STRING   : '"'(CHAR)*'"'
Run Code Online (Sandbox Code Playgroud)

但是在字符串中我希望匹配除新行'\n'以外的所有字符.有什么想法我能做到吗?

string antlr char match

9
推荐指数
1
解决办法
1万
查看次数

慢速ANTLR4在Python中生成Parser,但在Java中生成速度很快

我试图将ant ANTLR3语法转换为ANTLR4语法,以便将它与antlr4-python2-runtime一起使用.该语法是C/C++模糊解析器.

在转换它(基本上删除树操作符和语义/语法谓词)之后,我使用以下方法生成了Python2文件:

java -jar antlr4.5-complete.jar -Dlanguage=Python2 CPPGrammar.g4

并且生成的代码没有任何错误,所以我在我的python项目中导入它(我使用PyCharm)进行一些测试:

import sys, time
from antlr4 import *
from parser.CPPGrammarLexer import CPPGrammarLexer
from parser.CPPGrammarParser import CPPGrammarParser

currenttimemillis = lambda: int(round(time.time() * 1000))

def is_string(object):
    return isinstance(object,str)

def parsecommandstringline(argv):
    if(2!=len(argv)):
        raise IndexError("Invalid args size.")
    if(is_string(argv[1])):
        return True
    else:
        raise TypeError("Argument must be str type.")

def doparsing(argv):
    if parsecommandstringline(argv):
        print("Arguments: OK - {0}".format(argv[1]))
        input = FileStream(argv[1])
        lexer = CPPGrammarLexer(input)
        stream = CommonTokenStream(lexer)
        parser = CPPGrammarParser(stream)
        print("*** Parser: START ***")
        start = …
Run Code Online (Sandbox Code Playgroud)

python java parsing antlr antlr4

9
推荐指数
1
解决办法
1859
查看次数

什么是ANTLR4的最小样本Gradle项目(使用antlr插件)?

我已经创建了新的Gradle项目

apply plugin: 'antlr'
Run Code Online (Sandbox Code Playgroud)

dependencies {
    antlr "org.antlr:antlr4:4.5.3"
Run Code Online (Sandbox Code Playgroud)

build.gradle.

创建src/main/antlr/test.g4具有以下内容的文件

grammar test;
r   : 'hello' ID;
ID  : [a-z]+ ;
WS  : [ \t\r\n]+ -> skip ;
Run Code Online (Sandbox Code Playgroud)

但它不起作用.没有生成java源文件(并且没有发生错误).

我错过了什么?

项目在这里:https://github.com/dims12/AntlrGradlePluginTest2

UPDATE

我发现我的样本实际上是有效的,但它把代码放到\build\generated-src了我没想到的地方:羞耻:

java antlr gradle antlr4

9
推荐指数
4
解决办法
7347
查看次数

标签 统计

antlr ×10

antlr4 ×4

java ×4

c# ×2

parsing ×2

char ×1

ebnf ×1

gradle ×1

grammar ×1

irony ×1

lexer ×1

match ×1

parser-generator ×1

python ×1

r ×1

string ×1

wikitext ×1