看到后,您不应该调用parse callSomething()
(我想您的意思callSomething
不是doSomething
)。a
和之间的区别在于callSomething
,一个是方法定义,而另一个是方法调用。
看到新定义时,您将需要进行检查以确保可以添加该定义,因此:
- 检查功能是否还不具有相同的签名
- 确保在适当的范围内执行方法声明(即可以在其他方法声明中声明方法吗?)
假设这些检查通过,则可以将其添加到地图中并开始检查该方法的内容。
找到类似的方法调用时callSomething()
,应执行以下检查:
callSomething
您的地图中是否存在?
- 是否正确调用了它(参数数量与找到的签名匹配)?
- 参数是否有效(如果使用了变量名,是否声明了它们?可以在此作用域中访问它们吗?)?
- 可以从您所在的地方(在私人,公共,受保护的地方)呼叫callSomething吗?
如果您认为callSomething()
还可以,那么此时您真正想做的事情取决于您希望采用的方式。严格来说,一旦您知道这样的调用已经可以了,您就只能保存方法的名称和参数,而无需进一步的细节。运行程序时,将使用在运行时应具有的参数来调用该方法。
如果想更进一步,您不仅可以保存字符串,还可以保存指向实际方法的链接。这样会更有效,但是如果您必须管理内存,可能会造成混乱。我建议您先简单地抓住字符串。稍后您可以尝试进行优化。
请注意,所有这些假设都是假设您已经对程序进行了lexx处理,这意味着您已经识别了程序中的所有标记并知道它们是什么。这并不是说您知道它们是否一起有意义,这就是解析阶段。如果您还不知道令牌是什么,我建议您首先专注于首先获取该信息。
希望对您有所帮助!欢迎来到程序员SE!