问题:
不知道如何翻译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
参数的堆栈将不包含)
令牌。)
令牌将已被丢弃。在这种情况下,丢弃是可取的,因为)
是纯语法,对于处理相关的带括号的表达式来说并不重要。
因此,要丢弃语法中不重要的标记,请在其后面立即放置!
指令。