gpt4 book ai didi

java - 从 Antlr4-Java 切换到 ParseKit-Objective-C : Channels in ParseKit?

转载 作者:行者123 更新时间:2023-11-29 05:28:25 24 4
gpt4 key购买 nike

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


具体来说:
如何翻译-> Channel(HIDDEN);从 Antlr4 语法到 ParseKit 语法。


上下文:
我正在为 iOS 在 Objective-C/Xcode 中创建一个 .Framework。我需要生成一个解析器,它模仿 Java 中 Antlr4 生成的解析器的基本功能。设计解析器功能的方法不是问题;我有兴趣了解更多关于 Grammar Syntax for ParseKit 的信息.


语法代码:

Antlr3 :
WHITESPACE : [ \t\r\n]+ {$channel=HIDDEN;}

Antlr4 :
WHITESPACE : [ \t\r\n]+ -> channel(HIDDEN);

ParseKit :
whitespace = /[\s\t\r\n]+/ <strong><em>_</em>__<em>_</em>__<em>_</em>__<em>_</em>__<em>_</em>__<em>_</em>__</strong>; 如何忽略???


问题:
- 是否ParseKit支持 channel ?
- ParseKit 的语法是什么?用于发送到隐藏 channel ?
- 或者,是否有任何性质类似于 Channels 的东西可以在 ParseKit 中工作?

最佳答案

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

但是,您可能可以使用 ParseKit 的 discard 功能实现您正在寻找的效果。

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

例如,假设您在 ParseKit 语法中有一个名为 primaryExpr 的规则,例如:

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

注意右括号 ')' 之后的 !。这是 discard 指令,它指示 ParseKit 分词器从报告给您的 ParseKit 汇编程序(委托(delegate))回调的 token 流中丢弃 ) token 。

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

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

关于java - 从 Antlr4-Java 切换到 ParseKit-Objective-C : Channels in ParseKit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com