我有自定义对象的操作。我希望每次生成解析器时都不必复制和粘贴所有#imports。是否可以使用某些@begin
或其他指令。
例如:
mycustomRule: word {
PUSH([[MyCoolNewObject alloc] initWith:POP_STR()]);
};
这一切都完美生成但是当试图编译时,显然生成的文件缺少#import "MyCoolNewObject.h"
答案 0 :(得分:1)
PEGKit的创作者。
PEGKit(但不是ParseKit)的灵感来自ANTLR,名为" Grammar Actions" 。语法操作是一种完全符合您要求的方法:在Parser的.h和.m文件中的各个位置插入任意代码。在列出任何规则之前,必须将它们放在语法的顶部。
使用PEGKit tag v0.3.6或更高版本(或主人的HEAD)。
以下是当前可用的所有语法操作,以及在生成的解析器的源代码中插入主体的位置的说明:
在.h文件中:@h
- .h文件顶部@interface
- 在标题的@interface
部分内@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"
}