forked from gavinkwoe/todparsekit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDemoTokensViewController.m
119 lines (93 loc) · 2.87 KB
/
DemoTokensViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//
// DemoTokensViewController.m
// ParseKit
//
// Created by Todd Ditchendorf on 8/2/09.
// Copyright 2009 Todd Ditchendorf. All rights reserved.
//
#import "DemoTokensViewController.h"
#import <ParseKit/ParseKit.h>
#import "PKParseTreeView.h"
@interface DemoTokensViewController ()
- (void)doParse;
- (void)done;
@end
@implementation DemoTokensViewController
- (id)init {
return [self initWithNibName:@"TokensView" bundle:nil];
}
- (id)initWithNibName:(NSString *)name bundle:(NSBundle *)b {
if (self = [super initWithNibName:name bundle:b]) {
self.tokenizer = [[[PKTokenizer alloc] init] autorelease];
[tokenizer.symbolState add:@"::"];
[tokenizer.symbolState add:@"<="];
[tokenizer.symbolState add:@">="];
[tokenizer.symbolState add:@"=="];
[tokenizer.symbolState add:@"!="];
[tokenizer.symbolState add:@"+="];
[tokenizer.symbolState add:@"-="];
[tokenizer.symbolState add:@"*="];
[tokenizer.symbolState add:@"/="];
[tokenizer.symbolState add:@":="];
[tokenizer.symbolState add:@"++"];
[tokenizer.symbolState add:@"--"];
[tokenizer.symbolState add:@"<>"];
[tokenizer.symbolState add:@"=:="];
}
return self;
}
- (void)dealloc {
self.tokenizer = nil;
self.inString = nil;
self.outString = nil;
self.tokString = nil;
self.toks = nil;
[super dealloc];
}
- (void)awakeFromNib {
NSString *s = [NSString stringWithFormat:@"%C", 0xab];
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:s];
[tokenField setTokenizingCharacterSet:set];
}
- (IBAction)parse:(id)sender {
if (![inString length]) {
NSBeep();
return;
}
self.busy = YES;
//[self doParse];
[NSThread detachNewThreadSelector:@selector(doParse) toTarget:self withObject:nil];
}
- (void)doParse {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//self.tokenizer = [PKTokenizer tokenizer];
self.tokenizer.string = self.inString;
self.toks = [NSMutableArray array];
PKToken *tok = nil;
PKToken *eof = [PKToken EOFToken];
while (eof != (tok = [tokenizer nextToken])) {
[toks addObject:tok];
}
[self performSelectorOnMainThread:@selector(done) withObject:nil waitUntilDone:NO];
[pool drain];
}
- (void)done {
NSMutableString *s = [NSMutableString string];
for (PKToken *tok in toks) {
[s appendFormat:@"%@ %C", tok.stringValue, 0xab];
}
self.tokString = [[s copy] autorelease];
s = [NSMutableString string];
for (PKToken *tok in toks) {
[s appendFormat:@"%@\n", [tok debugDescription]];
}
self.outString = [[s copy] autorelease];
self.busy = NO;
}
@synthesize tokenizer;
@synthesize inString;
@synthesize outString;
@synthesize tokString;
@synthesize toks;
@synthesize busy;
@end