Tag: antlr

Visual Studio 2013 ASP.NET项目中的Antlr包的目的是什么?

Visual Studio 2013中的ASP.NET(Web窗体)项目模板包含几个包。 我试图找出哪些是必不可less的(可能需要为此创build一个单独的问题)。 http://blogs.msdn.com/b/webdev/archive/2013/10/16/asp-net-features-in-new-project-templates-in-visual-studio-2013.aspx中的post解释了其中一些目的,但我不明白哪些需要Antlr服务。 有人可以澄清?

为什么.NETexception不被try / catch块捕获?

我正在使用C#的ANTLRparsing器库进行项目工作。 我已经build立了一个语法来parsing一些文本,它运作良好。 但是,当parsing器遇到非法或意外的令牌时,会抛出许多exception之一。 问题是,在某些情况下(不是全部),我的try / catch块不会捕获它,而是停止执行作为未处理的exception。 我的问题是,我不能在其他地方复制这个问题,但在我的完整代码。 调用堆栈显示exception肯定发生在我的try / catch(Exception)块中。 我唯一能想到的是在我的代码和引发exception的代码之间发生了几个ANTLR程序集调用,而且这个库没有启用debugging,所以我不能一步一步地完成它。 我不知道如果不可debugging程序集抑制exception冒泡? 调用堆栈看起来像这样; 外部程序集调用在Antlr.Runtime: Expl.Itinerary.dll!TimeDefLexer.mTokens()1213行C# Antlr3.Runtime.dll!Antlr.Runtime.Lexer.NextToken()+ 0xfc字节 Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.FillBuffer()+ 0x22c字节 Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.LT(int k = 1)+ 0x68字节 Expl.Itinerary.dll!TimeDefParser.prog()第109行+ 0x17字节C# Expl.Itinerary.dll!Expl.Itinerary.TDLParser.Parse(string Text =“”,Expl.Itinerary.IItinerary Itinerary = {Expl.Itinerary.MemoryItinerary})Line 17 + 0xa bytes C# 来自Parse()中最底层调用的代码片段如下所示: try { // Execution stopped at parser.prog() TimeDefParser.prog_return prog_ret = parser.prog(); return prog_ret == null ? null […]

如何为ANTLR指定一个目标包?

如果我打电话: java org.antlr.Tool -o outdir sources/com/example/Java5.g …使用antlr-3.1.3将在目录outdir/sources/com/example生成parsing器和词法分析器代码。 但生成的类没有任何package声明。 我需要他们在包com.example生活。 有没有一种方法来指定目标包?

什么更好,ANTLR或者JavaCC?

关注的是文档/可学习性,eclipse集成,工具,社区支持和性能(大致顺序)。

Antlr的优势(与lex / yacc / bison相比)

过去我使用lex和yacc(更常见的是bison)来处理各种项目,通常是翻译(例如EDIF的一个子集stream入EDA应用程序)。 另外,我必须支持基于lex / yacc语法的代码。 所以我知道我的工具,虽然我不是专家。 我在过去的各种论坛上看到过关于Antlr的积极评论,我很好奇我可能会错过什么。 所以,如果你使用了两者,请告诉我什么Antlr更好或更先进。 我目前的限制是我在C ++商店工作,任何我们发布的产品都不会包含Java,所以得到的parsing器将不得不遵循这个规则。

如何将string转换为其等价的LINQexpression式树?

这是原始问题的简化版本。 我有一个叫Person的类: public class Person { public string Name { get; set; } public int Age { get; set; } public int Weight { get; set; } public DateTime FavouriteDay { get; set; } } …让我们说一个实例: var bob = new Person { Name = "Bob", Age = 30, Weight = 213, FavouriteDay = '1/1/2000' } […]

ANTLR词法分析器如何消除其规则(或为什么我的分析器产生“不匹配的input”错误)?

注意:这是一个自我回答的问题 ,旨在提供有关ANTLR用户最常犯的错误之一的参考。 当我testing这个非常简单的语法时: grammar KeyValues; keyValueList: keyValue*; keyValue: key=IDENTIFIER '=' value=INTEGER ';'; IDENTIFIER: [A-Za-z0-9]+; INTEGER: [0-9]+; WS: [ \t\r\n]+ -> skip; 通过以下input: foo = 42; 我结束了以下运行时错误: 第1行:6个不匹配的input“42”,期望INTEGER 第1行:8个不匹配的input';' 期待'=' 为什么在这种情况下,ANTLR不认为42是INTEGER ? 它应该匹配模式[0-9]+就好了。 如果我将INTEGER和IDENTIFIER的定义顺序颠倒INTEGER ,似乎可行,但为什么顺序是重要的呢?

ANTLR中的“片段”是什么意思?

ANTLR中的片段是什么意思? 我见过两条规则: fragment DIGIT : '0'..'9'; 和 DIGIT : '0'..'9'; 有什么不同?

使用ANTLR 3.3?

我正在尝试开始使用ANTLR和C#,但是由于缺less文档/教程,我发现它非常困难。 我已经find了一些老版本的一些半心半意的教程,但似乎API已经有一些重大的改变。 任何人都可以给我一个简单的例子,如何创build一个语法,并在短程序中使用它? 我终于成功地将我的语法文件编译成一个词法分析器和parsing器,并且我可以在Visual Studio中获得这些编译和运行的语言(因为C#二进制文件似乎已经过时了,所以必须重新编译ANTLR源代码)更不用说源代码没有一些修正的情况下不能编译),但我仍然不知道如何处理我的分析器/词法分析器类。 据说,它可以产生一个AST给予一些input…然后我应该能够做一些事情与此。

词法分析器与parsing器

词法分析器和parsing器在理论上真的不一样吗? 讨厌正则expression式似乎很时髦: 编码恐怖 , 另一篇博客文章 。 然而,stream行的基于乐谱的工具: pygments , geshi或者美化 ,都使用正则expression式。 他们似乎什么都得不到 什么时候足够轻松,什么时候需要EBNF? 有没有人使用这些词法分析器生成的令牌与野牛或antlr语法分析器?