问题标签 [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.

0 投票
1 回答
218 浏览

java - 输入字符串时出现 Antlr 错误

当我使用我的 Antlr 定义语言在我的 Java 编辑器中输入一个字符串时,我一输入第一个引号(“)就会出错。

输入:

错误:

我怀疑这是因为我在语法中定义了我的字符串文字。

语法定义

我怀疑正在发生的事情是,一旦它看到第一个引号,它就会尝试提取字符串。这是实时完成的,因为它是一个使用词法分析器对语法进行颜色编码的 IDE。我可以用我的语法做些什么来防止这个错误吗?

编辑:我想做的是让它检查到行尾。IDE 只会从引用开始将线涂成橙色,直到用户完成引用,就像 netbeans 或 eclipse 一样。我只是不确定如何通过语法来解决这个问题,所以它反映在词法分析器/解析器中

0 投票
2 回答
101 浏览

antlr - 为什么这个语法给我一个“非 LL(*) 决定”错误?

我正在尝试在我的语法中添加对表达式的支持。我正在遵循Scott Stanchfield 的 Antlr Tutorial给出的示例。由于某种原因,添加规则导致错误。它导致非 LL(*) 错误说,“决策可以匹配输入,例如“'+'..'-' IDENT”,使用多种替代方案”

简单的输入如:

导致错误。我正在使用 AntlrWorks Interpreter 来测试我的语法。如何为一元 +/- 和添加规则构建树似乎存在问题。我不明白为什么有两种可能的解析。

这是语法:

我需要一双额外的眼睛。我错过了什么?

0 投票
1 回答
379 浏览

c# - 解决 antlr 中的令牌冲突

我有一个令牌 OR:'OR'; 我用于评估布尔表达式(a==b OR a==c)我有另一个规则用于解析字符列表 AZ、AK、OR、GA 中的状态缩写...我发现的是 antlr在状态列表上有错误认为 OR 应该是一个or令牌而不是

我将如何解决这种歧义?

这是我试图解析的一些规则

  • THEN STATE_LICENSE AL,AK,AS,AZ,AR,CT,DE,DC,FM,FL,GA,GU,HI,ID,IL,IN,IA,KS,KY,LA,ME,MH,MD,MA, MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PW,PA
  • 如果 1198 == "x" 或 1190 != "x" 那么禁用 800
  • IF 801 >= "1000000" THEN DISPLAY_ERROR "这+太贵了。+Go+and+get+cheaper+one+!!!"

这是我正在使用的语法

0 投票
1 回答
839 浏览

antlr - 具有通配符运算符的 ANTLR 嵌套语义谓词

我为类似 Scheme 的语言解释器创建了一个语法。最初,我有一个用于 if-then-else 语句的语义谓词来控制评估,即当条件为真时,仅评估“then”;当它为假时,仅评估“其他”。为了添加类型检查功能,我添加了第二个包含第一个语义谓词的语义谓词。不过,这是一个 hack,因为要进行类型检查或评估,我必须手动将全局布尔值更改typeCheck为 true 或 false。

IF 语句的 AST 现在有两个分支。第一个(IFT)用于对 IF 语句的参数进行类型检查。[这就是为什么有两个谓词;要进行类型检查,必须评估所有参数] 第二个分支 (IFE) 用于评估短路 if-then-else。当我添加包含第一个语义谓词的第二个语义谓词时,问题就开始了,得到了臭名昭著的“输入时没有可行的替代方案”错误。在慢慢无处可去之后,我只用基本要素创建了新语法。同样的问题。这是精简的 AST:

如果AST

虽然我从未经历过,但我已经看到在 Eclipse 中使用 ANTLR IDE 报告的 SO 问题。所以我启动了 ANTLRWorks,调试了解析器语法,然后尝试调试树语法。版本 1.4.3 和 1.4.2 都弹出这个框,“警告:远程解析器使用的语法不一样”。我单击 OK,然后在调试器中单击 Step Forward 一次,java.exe*32 进程终止。作为最后的测试,我用 antlr-3.3 和 antlr-3.4 完整的 jar 从命令行手动编译,没有变化。

解析器:

树语法:

我找不到关于嵌套语义谓词的任何特定问题,但我也没有找到任何示例。为什么这段代码失败了?关于 ANTLRWorks 调试器问题的任何想法?

0 投票
2 回答
1492 浏览

antlr - ANTLR 制定语法分析插入/更新/删除 SQL 查询

我是ANTLR语法写作的新手。我的要求是解析插入/更新/删除SQL查询以获取详细信息,例如正在更新/插入/删除行的表、列列表及其值等。是的,有一个很好的文档ANTLR,但如果有人可以帮助我用于查询解析的特定语法将有很大帮助。

0 投票
1 回答
3555 浏览

escaping - ANTLR 词法分析器排除字符串

大家好

我正在尝试构建一个用于解析特定领域语言的词法分析器。我有一组保留令牌(片段 RESERVED)和一个转义字符。每当出现未转义的保留标记时,词法分析器都应该拆分。

一个简化的例子:

问题:

只要 RESERVED 仅包含单个字符标记,此方法就可以正常工作。否定操作 ~ 仅适用于单个字符。

不幸的是,我也需要它与字符串令牌一起使用。所以标记超过 1 个字符(参见示例中的 AND)。有没有一种简单的方法可以做到这一点?我需要在没有内联 java 或 c 代码的情况下解决问题,因为它必须编译成不同的语言,而且我不想维护单独的副本。

我希望有一个人可以帮助我


来自整个脚本的示例输入

创建;假;假;1.key = bla;trig;true;false;(1.key1 ~ .*thisIsRegex || 2.oldKey1 €) && (1.bla=2.blub || 1.blub=bla);

在 Lexer 之后,这应该看起来像这样 | 是令牌分隔符,空格不重要:|create|;|false|;|false|;|1.|key| = |白|;| 触发|;|true|;|false|;|(|1.|key1| ~| .*thisIsRegex| || |2.|oldKey1| €|)| && |(|1.|bla|=|2.|blub| || |1.|blub|=|bla|)|;|

整个脚本可以在http://pastebin.com/Cz520VW4上找到 (注意这个链接会在一个月内过期)它目前不适用于正则表达式部分。


可能但可怕的解决方案

我找到了一个可能的解决方案,但它真的很hacky并且使脚本更容易出错。所以我宁愿找更干净的东西。

我目前正在做的是手写否定(~RESERVED)。

真正的脚本有超过 5 个多字符标记,以后可能会有更多超过 2 个字符,所以这种解决问题的方法会变得相当复杂。

0 投票
2 回答
753 浏览

java - 删除 ANTLR 生成的 java 类中的(绝对)路径:

我正在使用 ANTLRWorks 1.4.3 和 ANTLR 3.4 从语法文件生成基于 Java 的解析器和词法分析器。生成的.java-files 包含字符串,如

此绝对路径用作

  • 返回字符串,例如在getGrammarFileName()词法分析器和解析器的方法中,以及
  • 在这两个文件中多次作为评论。

我看到以下缺点:

  • 如果其他人在他的开发环境中使用不同的路径重新生成这些文件,即使没有对语法文件进行任何更改,也会引入很多更改。
  • 没有人,尤其是在开源项目中,需要知道我的语法文件到底存储在哪里。例如,关于C:\\Users\\simon\\customerA\\crap_software\\[rest of the path to grammar file]

有没有办法在 ANTLRWorks 或 ANTLR s.th 中控制它。至少只使用相对路径?

0 投票
1 回答
86 浏览

antlr - ANTLR 规则独立工作,但在包含在另一个规则中时失败

我正在尝试为重新解析和重新标记的 kconfig 文件(重新标记以解决一些歧义)编写 ANTLR 语法。语法的简化版本是:

有输入:

我可以将 antlrworks 设置为仅解析第二行(注释掉第一行),然后我得到正确的 defConfigStatement 令牌,并带有下面的正确表达式。但是,如果我使用 configOptions 规则或 configStatement 规则(第一行未注释),我的 configOptions 会导致一个空集并引发 NoViableAlt 异常。

什么会导致这种行为?我知道 defConfigStatement 规则是准确的并且可以正确解析,但是一旦将它作为潜在选项添加到另一个规则中,它就会失败。我知道我没有冲突的规则,并且我已将 DEF_BOOL 和 DEF_TRISTATE 规则放在我的词法分析器规则列表中,因此它们优先于其他词法分析器规则。

/自编辑后添加/ 为了使问题进一步复杂化,如果我在 configOptions 规则中移动 defConfigStatement 选项,它将起作用,但其他规则将失败。

编辑:使用完整的简化语法。

简而言之,为什么该规则自己起作用,但在 configOptions 中却失败了(尤其是因为 configOptions 是 (A | B | C)* 形式)?

0 投票
1 回答
72 浏览

java - ANTLR 重写语句的问题(简单?)

我不断得到MissingTokenException,,NullPointerException如果我没记错的话NoViableAlterativeException。ANTLRWorks 的日志文件/控制台输出对我来说没有足够的帮助。

我所追求的是重写,如下所示:

下面是我用来创建测试文件的语法示例。

我也试过:

和这个:

以及我数不清的无数其他版本(黑客)。

谁能帮我解决这个问题?

0 投票
0 回答
157 浏览

antlrworks - 使用 Antlworks 调试语法

我最近发现了 AntlrWorks,我正在尝试调试我的语法(用 Xtext、Eclipse 和 MWE 编辑)。

我配置了 javac 路径和类路径,但 antlrworks 仍然在抱怨:

“找不到符号:DebugAbstractInternalAntlrParser 类”

有人已经遇到过这个问题吗?

谢谢