问题标签 [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.
java - 输入字符串时出现 Antlr 错误
当我使用我的 Antlr 定义语言在我的 Java 编辑器中输入一个字符串时,我一输入第一个引号(“)就会出错。
输入:
错误:
我怀疑这是因为我在语法中定义了我的字符串文字。
语法定义
我怀疑正在发生的事情是,一旦它看到第一个引号,它就会尝试提取字符串。这是实时完成的,因为它是一个使用词法分析器对语法进行颜色编码的 IDE。我可以用我的语法做些什么来防止这个错误吗?
编辑:我想做的是让它检查到行尾。IDE 只会从引用开始将线涂成橙色,直到用户完成引用,就像 netbeans 或 eclipse 一样。我只是不确定如何通过语法来解决这个问题,所以它反映在词法分析器/解析器中
antlr - 为什么这个语法给我一个“非 LL(*) 决定”错误?
我正在尝试在我的语法中添加对表达式的支持。我正在遵循Scott Stanchfield 的 Antlr Tutorial给出的示例。由于某种原因,添加规则导致错误。它导致非 LL(*) 错误说,“决策可以匹配输入,例如“'+'..'-' IDENT”,使用多种替代方案”
简单的输入如:
导致错误。我正在使用 AntlrWorks Interpreter 来测试我的语法。如何为一元 +/- 和添加规则构建树似乎存在问题。我不明白为什么有两种可能的解析。
这是语法:
我需要一双额外的眼睛。我错过了什么?
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+!!!"
这是我正在使用的语法
antlr - 具有通配符运算符的 ANTLR 嵌套语义谓词
我为类似 Scheme 的语言解释器创建了一个语法。最初,我有一个用于 if-then-else 语句的语义谓词来控制评估,即当条件为真时,仅评估“then”;当它为假时,仅评估“其他”。为了添加类型检查功能,我添加了第二个包含第一个语义谓词的语义谓词。不过,这是一个 hack,因为要进行类型检查或评估,我必须手动将全局布尔值更改typeCheck
为 true 或 false。
IF 语句的 AST 现在有两个分支。第一个(IFT)用于对 IF 语句的参数进行类型检查。[这就是为什么有两个谓词;要进行类型检查,必须评估所有参数] 第二个分支 (IFE) 用于评估短路 if-then-else。当我添加包含第一个语义谓词的第二个语义谓词时,问题就开始了,得到了臭名昭著的“输入时没有可行的替代方案”错误。在慢慢无处可去之后,我只用基本要素创建了新语法。同样的问题。这是精简的 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 调试器问题的任何想法?
antlr - ANTLR 制定语法分析插入/更新/删除 SQL 查询
我是ANTLR
语法写作的新手。我的要求是解析插入/更新/删除SQL
查询以获取详细信息,例如正在更新/插入/删除行的表、列列表及其值等。是的,有一个很好的文档ANTLR
,但如果有人可以帮助我用于查询解析的特定语法将有很大帮助。
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 个字符,所以这种解决问题的方法会变得相当复杂。
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 中控制它。至少只使用相对路径?
antlr - ANTLR 规则独立工作,但在包含在另一个规则中时失败
我正在尝试为重新解析和重新标记的 kconfig 文件(重新标记以解决一些歧义)编写 ANTLR 语法。语法的简化版本是:
有输入:
我可以将 antlrworks 设置为仅解析第二行(注释掉第一行),然后我得到正确的 defConfigStatement 令牌,并带有下面的正确表达式。但是,如果我使用 configOptions 规则或 configStatement 规则(第一行未注释),我的 configOptions 会导致一个空集并引发 NoViableAlt 异常。
什么会导致这种行为?我知道 defConfigStatement 规则是准确的并且可以正确解析,但是一旦将它作为潜在选项添加到另一个规则中,它就会失败。我知道我没有冲突的规则,并且我已将 DEF_BOOL 和 DEF_TRISTATE 规则放在我的词法分析器规则列表中,因此它们优先于其他词法分析器规则。
/自编辑后添加/ 为了使问题进一步复杂化,如果我在 configOptions 规则中移动 defConfigStatement 选项,它将起作用,但其他规则将失败。
编辑:使用完整的简化语法。
简而言之,为什么该规则自己起作用,但在 configOptions 中却失败了(尤其是因为 configOptions 是 (A | B | C)* 形式)?
java - ANTLR 重写语句的问题(简单?)
我不断得到MissingTokenException
,,NullPointerException
如果我没记错的话NoViableAlterativeException
。ANTLRWorks 的日志文件/控制台输出对我来说没有足够的帮助。
我所追求的是重写,如下所示:
下面是我用来创建测试文件的语法示例。
我也试过:
和这个:
以及我数不清的无数其他版本(黑客)。
谁能帮我解决这个问题?
antlrworks - 使用 Antlworks 调试语法
我最近发现了 AntlrWorks,我正在尝试调试我的语法(用 Xtext、Eclipse 和 MWE 编辑)。
我配置了 javac 路径和类路径,但 antlrworks 仍然在抱怨:
“找不到符号:DebugAbstractInternalAntlrParser 类”
有人已经遇到过这个问题吗?
谢谢