问题标签 [antlrworks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
antlr - 如何解决 Antlr3 中的这种解析歧义
希望这只是帮助我解决这个问题的适量信息。
给定以下 ANTLR3 语法
这是导致解析器出现问题的行。
ANTLRWorks 将 10001 之后的最后一个 .
以红色突出显示为以下错误的问题。
我怎样才能让这个停止投掷org.antlr.runtime.EarlyExitException
?
我确信这是因为我的number
解析器规则和尝试使用.
EOL 分隔符之间存在一些歧义。
antlr - 如何摆脱我的 ANTLR3 语法中的以下多个替代警告?
我希望能够将函数嵌套在其他函数中。
这是它抱怨的那条线
这就是它正在考虑的替代方案
我正在使用.
我的语句结束规则
这是 ANTLRWorks 中的 synatx 图
(来源:vertigrated.com)
我真的很喜欢在没有任何警告的情况下编译/工作。如何解决此警告情况?
antlr - 决策可以使用多种选择匹配诸如“ID”之类的输入:1、2
我正在尝试定义一个简单的函数式语言语法,我几乎完成了我的定义,但我无法克服以下歧义。
以下是我认为的相关规则,ATOM 和 ID 的绘图几乎相同:
这是来自 ANTLRWorks 的语法树
id 替代品 http://www.vertigrated.com/images/id_alternatives.png
这是我试图支持解析的粗略稻草人。
所以我需要能够支持statements
嵌套functions
我的赋值运算符在哪里->
,这是一种单一的赋值语言
.
我的语句结束标记在哪里
这甚至可以用 ANTLR3 解析吗?
antlr - 将小写字母与 ANTLR 匹配
我将 ANTLRWorks 用于一个简单的语法:
但是,根据解释器( . lowercase_string
Ideas ?foobar
MismatchedSetException(10!={})
antlr - ANTLRWorks 1.4.3 无法正确读取扩展 ASCII 字符
我正在研究一个相当标准的编译器项目,为此我选择了 ANTLR 作为解析器生成器。在将现有语法从 v2 更新到 v3 时,我注意到 ANTLRWorks(ANTLR 的官方 IDE)没有正确显示文件中的任何扩展 ASCII 字符。即使在使用 Notepad++ 将文件从 ASCII 转换为 UTF8 之后,它仍然将这些字符显示为正方形。在记事本++中,它们显示得很好。
由于这个故障意味着 ANTLRWorks 在我保存文件时会损坏文件,所以我不能再将它用作编辑器,这很烦人。这里有没有其他人遇到过这个问题并且可能已经解决了?非常感谢。
[编辑]:最新版本的ANTLRWorks(昨天下载)和我从http://www.antlr.org/grammar/1086696923011/vhdlams/index.html获得的vams.g语法文件出现了具体问题
ascii - ANTLRWorks 1.4.3 无法显示和破坏 ASCII 字符
作为我之前的问题(ANTLRWorks 1.4.3 can't proper read extended-ASCII characters)的新进展,我使用十六进制编辑器创建了一个简单的文本文件:
或十六进制:
生成的文件在 Notepad++ 中可以正常读取。在 ANTLRWorks 1.4.3 中打开时,(扩展的)ASCII 字符显示为方框。在行尾添加和删除空格后保存文件后,十六进制文件视图如下所示:
出于某种原因,撇号之间的初始空格 (20) 被破坏为问号 (3F),带有变音字符 (E7) 的特殊 c 和紧随其后的撇号都被问号替换。
似乎扩展 ASCII 字符的存在以某种方式导致了可怕的错误。这里的任何人都可以复制这个问题和/或提供可能的原因和解决方案吗?
提前致谢。
java - ANTLR - 语法和树语法之间的令牌枚举不匹配
背景
我正在尝试使用 AntlrWorks 编写一个简单的语法,用于测试一组值是否存在(或不存在)指定元素的布尔方程。我创建了一个组合的词法分析器/解析器语法,可以产生所需的 AST。我还编写了一个相应的树语法,它似乎可以工作(通过 AntlrWorks 的调试功能)。
问题
但是,当我尝试在测试程序中将两者连接在一起时(即同一个程序中的 lex、parse 和 tree parse),我会收到类似...
node from line 1:5 required (...)+ loop did not match anything at input 'and'
和
node from after line 1:8 mismatched tree node: UP expecting <DOWN>
作为一个健全性测试,我让测试程序toStringTree()
从生成的 AST 和toTokenTypeString()
生成的TreeNodeStream
.
我发现枚举TreeNodeStream
的令牌类型值与自动生成的树语法代码中的枚举令牌类型值不匹配。
例子
样本输入:
"true and false"
解析器提供的树的 toStringTree() 输出:
(and true false)
toTokenTypeString()
包含上述 AST 的 TreeNodeStream 的输出:19 2 22 20 3 8
该令牌流应该是AND <DOWN> 'true' 'false' <UP> NEWLINE
但是 TreeParser 将其视为CLOSEPAREN <DOWN> OR 'false' <UP> OPENPAREN
(基于查看节点令牌类型输出并根据树语法中定义的枚举检查它)并抛出错误
1:5 required (...)+ loop did not match anything at input 'and'
底线
为什么我的树解析器没有设置为正确识别我的 AST?
以下是我的来源。我很感激任何关于我必须犯的愚蠢错误的反馈:)
词法分析器/解析器语法
树语法
测试程序
math - ANTLRWorks - 代码生成卡住而不生成
我已经使用以下语法为算术表达式定义了一个语法。它是一个更复杂的整体的一个子集,但是只有当我将语法扩展为包括逻辑运算时才会出现问题。
当我尝试使用 antlrworks 对 gen 进行编码时,甚至需要很长时间才能开始生成。我认为问题出在 paren 的规则中,因为它包含一个循环到 expr 的开头。解决此问题的任何帮助都会很棒
提前致谢
使用的选项:
语法代码如下:
`
antlr - ANTLR 在无效输入时不发出错误消息
我已经开始学习 ANTLR,以便将来实现特定领域的语言 (DSL)。我已经购买了 The Definitive ANTLR Reference 并开始通过它来熟悉程序和语言/编译器设计的概念。我已经成功地让所有东西在我的环境(Visual Studio 2010 和 C#)中工作,并且我已经成功地创建了一些基本的语法,如整本书所述。java的源代码可以在这里找到:http: //pragprog.com/titles/tpantlr/source_code
然而,在完成第 3 章时,我遇到了一个问题,涉及到类没有向控制台发出错误,正如书中所示。我使用的语法与书中使用的相同,所以我假设它与 C# 运行时有关。我目前正在使用 ANTLRWorks 来生成词法分析器/解析器,并且我正在使用 CSharp3 的 3.4 ANTLR 分发运行时(Antlr3.Runtime.dll 和 Antlr4.StringTemplate.dll)。
这是一个已知的问题?如果没有,我应该尝试使用旧版本的运行时或 ANTLRWorks 吗?
我正在使用的语法:
如果有人需要查看 C# 类,我会发布它们,但它们很长,所以我会推迟到有人请求它们。谢谢你。
java - ANTLR 不会在无效输入上抛出错误
我正在使用 ANTLR 解析我正在编写的 Java 工具中的逻辑表达式,我遇到了问题,因为将无效的输入字符串传递给生成的 ANTLR 词法分析器和解析器不会导致任何异常。生成的文件并没有像我期望的那样抛出 RecognitionException,而是将错误消息打印到控制台并返回,就好像没有发生错误一样,导致我的程序稍后在遇到空数据时崩溃。
我使用 ANTLRWorks 1.4.3 版来生成文件,似乎应该有某种选项让它实际抛出错误而不是打印到控制台,但我没有找到任何东西。有谁知道如何让 ANTLR 实际抛出错误消息?我看到 C# 中的同样问题是通过使用旧版本的 ANTLR 解决的,这是我需要做的吗?
编辑:在巴特指出我要找的方向后,我找到了这个页面
https://theantlrguy.atlassian.net/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3
其“错误处理”部分的代码可以更准确地完成我想要的。要改变 ANTLR 捕获异常的方式,你可以在语法文件中这样说:
这迫使 ANTLR 抛出异常而不是处理和恢复。该部分还有一些关于覆盖不匹配和恢复函数以确保抛出所有可能的异常的内容。