2011-08-17 38 views
1

在flex/lex/bison/yacc(我刚刚开始阅读的所有内容)中,您可以将“$$”设置为等于某个值($ 1,$ 2,$ 3),这就是返回的值。至少我认为这是如何运作的。Objective-C ParseKit返回值

在ParseKit中,您会得到一个堆栈,因此我认为($ 1,$ 2,$ 3)将是堆栈中的前三个值。但是,我认为你想要做的是将这些值从堆栈中弹出并将你的返回值放在堆栈上。我看到堆栈带有一个推送方法。在推动某些事情之前,您是否必须首先弹出传入的值?

谢谢

回答

2

开发者的ParseKit在这里。我会说:这取决于。有几个想法:

  1. 是的,它往往是通过调用发送到您的解析器委托回调组装-[PKAssembly push:]有用/可取的程序集的堆栈上存储对象/值。后来的回调会在程序集的堆栈中找到这些值,并且可能会在找到它们时采取行动。

  2. 另一种选择:如果您的回调方法正在构建某个结果对象,则通常希望将其存储为传递到回调方法的程序集的-[PKAssembly target]属性。所以你有两个地方你可以存储值:程序集的目标或程序集的堆栈。目标是这个'正确'的地方,但是堆栈通常也很方便。要么是没有问题,但我会说:在堆栈中存储临时值,但将正在构建的最终对象存储为目标。但是,你也可以做。

  3. 是的,你的回调应该经常想先弹出堆栈中的值,但这不是必需的。想想如果这样:你的委托回调方法收到一个PKAssembly对象作为参数。通常你的回调方法会检查程序集的堆栈并根据它在那里找到的内容采取行动。通常,在你的回调中,如果你正在采取行动,你会想要弹出你在那里找到的值。基本上:你的回调应该弹出它感兴趣的值/采取行动,因为从某种意义上说,你的回调是这些项目/信息的预期接收者。

+0

感谢您的回应! – JPC