[英]Switching from Antlr4-Java to ParseKit-Objective-C: Channels in ParseKit?
问题:
不知道如何翻译Antlr4“.g4”语法文件的内容以匹配ParseKit的语法。
特别:
如何翻译-> Channel(HIDDEN);
从Antlr4 Grammar到ParseKit语法。
语境:
我正在为iOS的Objective-C / Xcode创建一个.Framework。 我需要生成一个Parser,它模仿Java中Antlr4 Generated Parser的基本功能。 设计Parser功能的方法不是问题; 我有兴趣了解更多关于ParseKit的语法语法 。
语法代码:
Antlr3 :
WHITESPACE : [ \\t\\r\\n]+ {$channel=HIDDEN;}
Antlr4 :
WHITESPACE : [ \\t\\r\\n]+ -> channel(HIDDEN);
ParseKit :
whitespace = /[\\s\\t\\r\\n]+/ _ __ _ __ _ __ _ __ _ __ _ __ ;
怎么忽略???
问题:
- ParseKit是否支持频道?
- ParseKit用于发送到隐藏频道的语法是什么?
-或者在ParseKit中可以使用与Channels类似的任何东西吗?
ParseKit的创建者在这里。 ParseKit没有Channels
功能,也没有像ANTLR那样的->
树重写功能。 (一般来说,ParseKit并不像ANTLR那样功能齐全)。
但是,您可以使用ParseKit的丢弃功能实现您正在寻找的效果。
在设计ParseKit语法时,您的语言通常会使用纯语法标记。 这些令牌对于计算结果和构建抽象语法树(用于进一步处理)并不重要。 您通常希望使用ParseKit自动丢弃这些令牌!
指示。
例如,假设您的ParseKit语法中有一条名为primaryExpr
的规则,例如:
primaryExpr = atom
| '(' expr ')'!
;
注意!
在紧密括号')'
。 这是丢弃的指令 ,它指示ParseKit标记生成器丢弃)
从报告给您ParseKit汇编(代表)回调标流令牌。
所以在你的-parser:didMatchPrimaryExpr:
callback中, assembly
参数的堆栈将不包含)
令牌。 本)
令牌已经被丢弃。 在这种情况下,丢弃是理想的,因为( )
是纯语法,对于处理相关的带括号的表达式并不重要。
因此,要在语法中丢弃一个不重要的令牌,请放置一个!
紧随其后的指令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.