Objective-c中的脚本阅读器

时间:2011-10-29 18:49:53

标签: objective-c cocoa nsstring

我正在尝试制作一种简单的标记语言,我需要我的Cocoa应用才能阅读它。我希望用Objective-c编写代码,但我很乐意使用任何其他语言。

这是我目前的问题。我正在使用此代码:

for (int character = 1; character < ([script length] - 1); character ++) {
    NSLog(@"%@", [[script substringToIndex:character] substringFromIndex:([[script substringToIndex:character] length] - 2)]);

不幸的是,如果我通过它传递字符串[button],它会在调试控制台中显示:

[
[b
[bu
[but
[butt
[__NSCFConstantString substringWithRange:]: Range or index out of bounds

我可以理清错误信息,但我需要知道如何阅读脚本并识别某些标签,例如[button]。任何人都可以给我一个关于这个主题有用的东西的链接吗?

2 个答案:

答案 0 :(得分:2)

这完全取决于您的脚本语言的复杂程度,以及它所需的效率和强大程度。

通常,如果您不需要丰富的语法,最好使用XML或JSON作为语法,并将自己的语义应用于其中一种语法。

否则,解析在编程中是一个相当大的复杂领域,你应该在深入研究之前进行一些研究(在网上和书中有很多好的参考资料)。在我几十年的经验中,我写了20个左右的“简单”解析器,我可以证明它永远不会像你期望的那样容易。

答案 1 :(得分:2)

只是举个例子:

NSString *str = @"[Button]";
NSUInteger i, len = [str length];

for (i = 1; i <= len; ++i)
    NSLog(@"%@", [str substringToIndex:i]);

for (i = 0; i < len; ++i)
    NSLog(@"%c", [str characterAtIndex:i]);

输出:

[
[B
[Bu
[But
[Butt
[Butto
[Button
[Button]
[
B
u
t
t
o
n
]

还有一个更有趣的案例:

for (i = 0; i < len; ++i)
    NSLog([NSString stringWithFormat:@"%%%dc", i+1],
          [str characterAtIndex:i]);

产生:

[
 B
  u
   t
    t
     o
      n
       ]