PegKit自定义包含自定义操作的文件

时间:2014-03-28 04:15:38

标签: objective-c pegkit

我有自定义对象的操作。我希望每次生成解析器时都不必复制和粘贴所有#imports。是否可以使用某些@begin或其他指令。

例如:

mycustomRule: word {
    PUSH([[MyCoolNewObject alloc] initWith:POP_STR()]);
};

这一切都完美生成但是当试图编译时,显然生成的文件缺少#import "MyCoolNewObject.h"

1 个答案:

答案 0 :(得分:1)

PEGKit的创作者。

PEGKit(但不是ParseKit)的灵感来自ANTLR,名为" Grammar Actions" 。语法操作是一种完全符合您要求的方法:在Parser的.h和.m文件中的各个位置插入任意代码。在列出任何规则之前,必须将它们放在语法的顶部。

使用PEGKit tag v0.3.6或更高版本(或主人的HEAD)。

以下是当前可用的所有语法操作,以及在生成的解析器的源代码中插入主体的位置的说明:

在.h文件中:
  • @h - .h文件顶部
  • @interface - 在标题的@interface部分内
在.m文件中:
  • @m - .m文件的顶部
  • @extension - 位于.m文件中的私有@interface MyParser ()类扩展名
  • @ivars - .m文件中@implementation MyParser {}内的私有ivars
  • @implementation - 在您的解析器@implementation内。定义方法的地方。
  • @init - 在您的解析器的init方法
  • @dealloc - 如果未启用ARC,则在解析器的dealloc方法中
  • @before - 设置代码就在这里。在解析开始之前执行。
  • @after - 拆除代码到此处。解析结束后执行。

(请注意,此处列出的@before@after语法操作与@before@after不同,后者也可能放在每个单独的规则中。)

根据您当前的需求,@m语法操作是正确的选择。所以将它添加到语法的顶部:

@m {
#import "MyCoolNewObject.h"
}