问题标签 [grammar-kit]
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.
syntax-highlighting - 将我的 .g4 转换为 .flex 和 .bnf 用于 IDEA 语法荧光笔
我以前从未使用过 JFlex,也不知道它是如何工作的。基本上,我已经为 Java 中的方案式语言构建了一个运行时,并且我拥有的解析器是使用 Antlr 4 生成的,所以我有一个 .g4 文件,如下所示:
一些例子(这样你就可以感受一下语法)。
(+ 1 2)
= 3((\ a b (+ a b)) 1 2)
= 3(+ "Hello, " "World")
=“你好,世界”
我想要做的是使用本指南为 IntelliJ-IDEA 构建一个语法高亮插件:http: //www.jetbrains.org/intellij/sdk/docs/tutorials/custom_language_support_tutorial.html。
这是我的 .flex 文件
这是我的 .bnf 文件
当我运行它时,我基本上什么都没有得到。
出于某种原因,仅突出显示字符串。
PsiViewer 看起来像这样:
有没有人看到为什么这不起作用的任何解释?
jetbrains-ide - 如何在 Grammar-Kit 中定义结构化数据类型?
我想定义一个像这样的结构/级联的领域特定语言(DSL)
据我了解,它需要以下规则:
- ROOT 和 TODO 对象必须以它们的关键字开头并以 END 结尾。
- ROOT 必须具有 NAME 属性。
- TODO 必须有 DESC 属性
- TODO 在 ROOT 中是 0..n 次
如何在 BNF 中表达这样的规则集?
vhdl - 词法分析 VHDL ' (tick) 标记
在 VHDL 中,' 字符可用于封装字符标记ie '.'
,也可以用作属性分隔符(类似于 CPP 的 :: 标记)ie string'("hello")
。
解析包含字符的属性名称时会出现问题ie string'('a','b','c')
。在这种情况下,一个天真的词法分析器会错误地将第一个字符标记'('
为一个字符,并且所有后面的实际字符都会被弄乱。
从 2007 年开始,comp.lang.vhdl google 组中有一个线程,它提出了一个名为“Lexing the ' char”的类似问题 ,该问题由用户 digratia 回答
请参阅问题报告 IR1045: http ://www.eda-twiki.org/isac/IRs-VHDL-93/IR1045.txt
从上面的代码片段可以看出,最后一个标记可以被捕获并用来区分类似的东西:
没有大的向前看或回溯。
但是,据我所知, flex 不会跟踪被解析的最后一个标记。
无需手动跟踪最后解析的标记,是否有更好的方法来完成此词法分析任务?
如果有帮助,我正在使用 IntelliJ GrammarKit。
intellij-plugin - 如何通过语法结构生成自动完成?
我配置了结构化语言的语法,现在想要对自动完成行为进行编码。有没有办法根据这样定义的语法生成它?
在 ROOT 之后点击自动完成热键应该建议 END、NAME 和 TITLE - 这在语法中明确定义
parsing - 在 .bnf 中固定和恢复时(解析)
我已经在互联网上进行了广泛搜索(现在至少半天),但似乎找不到所需的答案。
目前我正在尝试为.bnf-file
具有自定义语言支持的 IntelliJ-Plugin 创建一个。
一些教程提到了{pin=1}
,{pin=2}
和的存在{recoverWhile=xyz}
,但我没有找到任何关于它们用途的真正解释,以及是否还有其他我应该知道的事情(也许 a{pin=3}
也存在?)。
那么有人可以告诉我这些标志、方法或它们的名称到底是什么,以及如何在我的 .bnf 中使用它们吗?
谢谢你的帮助和最好的问候, Fuchs
parsing - 不平衡的树。很可能是由不平衡的标记引起的
我正在开发一个 IntelliJ 插件,它将添加对自定义语言的支持。目前,我仍在尝试习惯语法工具包以及插件开发的工作原理。
为此,我开始研究基本表达式的解析器:
根据 JetBrains 提供的文档,我尝试为上述示例编写 BNF 和 JFlex 语法。
这些语法生成的代码可以编译,但是当插件运行时,它会崩溃:
java.lang.Throwable:不平衡树。很可能是由不平衡的标记引起的。尝试针对传递的 PsiBuilder 调用 setDebugMode(true) 以确定问题的确切位置
启用调试模式会打印一长串跟踪:
即使有这些调试日志,我仍然不明白出了什么问题。我试过用谷歌搜索,我什至无法弄清楚“标记”在这种情况下是什么意思......
这是 BNF 语法:
intellij-idea - 如何解决在语法工具包中使用关键字作为标识符的歧义
我一直在尝试为 Grammarkit 编写 graphql 语言语法,但我发现自己在很长一段时间内都陷入了歧义问题。graphql 中的关键字(例如:、、、type
)implements
也scalar
可以是类型或字段的名称。IE
起初我tokens
在 bnf 中定义了这些关键字,但这意味着上面的情况是无效的。但是如果我在描述规则时直接写这些关键字,就会导致语法上的歧义。我根据下面的语法看到的一个问题示例是,如果您定义了这样的内容
PSI 查看器告诉我,在@cool
它的位置期待 a DirectiveAddtlLocation
,这是我什至在标量规则中都没有引用的规则。有没有人熟悉语法包并遇到过这样的事情?我真的很感激一些见解。谢谢你。
这是我上面提到的错误示例的语法摘录。