繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM