从Antlr4-Java切换到ParseKit-Objective-C:ParseKit中的通道



问题:
不知道如何翻译Antlr4".g4"语法文件的内容以匹配ParseKit的语法。


具体说明:
如何将-> Channel(HIDDEN);从Antlr4语法转换为ParseKit语法。


上下文:
我正在创建。iOS版Objective-C/Xcode中的框架。我需要生成一个Parser,它模仿Java中Antlr4生成的Parser的基本功能。设计Parser功能的方法不是问题;我有兴趣学习更多关于语法语法的ParseKit。


语法代码:

Antlr3
WHITESPACE : [ trn]+ {$channel=HIDDEN;}

Antlr4
WHITESPACE : [ trn]+ ->channel(HIDDEN);

ParseKit
whitespace = /[strn]+/__________________;如何忽略


问题:
-ParseKit支持Channels吗?
-ParseKit用于发送到隐藏通道的语法是什么?
-或者,在ParseKit中是否有类似于Channels的特性?

ParseKit的创建者。ParseKit没有Channels特性,也没有像ANTLR那样具有->树重写特性。(一般来说,ParseKit的功能不如ANTLR全面)。

但是,您可能可以使用ParseKit的丢弃功能来达到您想要的效果。

在设计ParseKit语法时,语言中通常有纯语法的标记。这些标记对于计算结果和构建抽象语法树(用于进一步处理)都不重要。您通常希望使用ParseKit!指令自动丢弃这些令牌。

例如,假设您的ParseKit语法中有一条规则,名为primaryExpr,类似于:

primaryExpr = atom
| '(' expr ')'!
;

注意右括号')'后面的!。这是丢弃指令,指示ParseKit令牌生成器从报告给ParseKit汇编程序(委托)回调的令牌流中丢弃)令牌。

因此,在-parser:didMatchPrimaryExpr:回调中,assembly参数的堆栈将不包含)令牌。)令牌将已被丢弃。在这种情况下,丢弃是可取的,因为)是纯语法,对于处理相关的带括号的表达式来说并不重要。

因此,要丢弃语法中不重要的标记,请在其后面立即放置!指令。

相关内容

  • 没有找到相关文章

最新更新