问题:
不知道如何翻译Antlr4 ".g4“语法文件的内容以匹配ParseKit语法。
特指:
如何将-> Channel(HIDDEN);从Antlr4语法翻译成ParseKit语法。
上下文:
我在Objective/Xcode中为.Framework创建一个iOS。我需要生成一个Parser,它模仿Antlr4生成的Java的基本功能。如何设计解析器的功能并不是什么问题;我想了解更多关于ParseKit的语法语法的知识。
语法代码:
Antlr3
WHITESPACE : [ \t\r\n]+ {$channel=HIDDEN;}
Antlr4
WHITESPACE : [ \t\r\n]+ -> channel(HIDDEN);
ParseKit
**`**_****_**`****`**_**`**__**`**_****_**`****`**_**`**__;如何忽视whitespace = /[\s\t\r\n]+/?
问题:
-支持ParseKit通道吗?
- ParseKit用来发送到隐藏频道的语法是什么?
-或者说,在本质上有类似于在ParseKit中工作的通道吗?
发布于 2014-02-22 15:50:51
这里是ParseKit的创造者。ParseKit没有Channels特性,也没有ANTLR那样的->树重写功能。(一般来说,ParseKit的功能不如ANTLR那样全面)。
但是,您可能可以使用ParseKit的丢弃特性实现您想要的效果。
在设计您的ParseKit语法时,您的语言中经常有纯语法的标记。这些标记对于计算结果或构建抽象语法树(对于进一步处理)都不重要。您通常希望使用ParseKit !指令自动丢弃这些令牌。
例如,假设您的ParseKit语法中有一个名为primaryExpr的规则,如:
primaryExpr = atom
| '(' expr ')'!
;请注意关闭括号!后的')'。这是丢弃指令,它指示ParseKit令牌程序从报告给ParseKit汇编程序(委托)回调的令牌流中丢弃)令牌。
因此,在-parser:didMatchPrimaryExpr:回调中,assembly参数的堆栈将不包含)令牌。)令牌已经被丢弃。在这种情况下,丢弃是可取的,因为)是纯语法,对于处理相关的括号式表达式并不重要。
因此,要丢弃语法中不重要的标记,请在其后面立即放置一个!指令。
https://stackoverflow.com/questions/21946167
复制相似问题