我正在尝试制作一种简单的标记语言,我需要我的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]
。任何人都可以给我一个关于这个主题有用的东西的链接吗?
答案 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
]