实现运算符重载和内联函数

时间:2011-04-05 16:48:07

标签: java overloading

我正在建立一个小规模的口译员。到目前为止,我有能力计算数学表达式,包括 变量和几个函数(如MOD,MAX等......)。我需要添加两个功能:

  

在线操作员重载操作员   重载是指一个术语   创建新的运营商   拥有你的一个功能   现有职能

     

所以例如在输入重载之后   * #POW,3 *#2将导致9。

     

内联函数创建另外   对于运算符重载,你也会   需要支持内联功能   creation4。换句话说,你会的   支持创建新功能,   使用以下语法:inline   _FUNC {@ arg1,@ arg2,...}

所以,我不知道从哪里开始。如果有人可以链接我某处,我可以阅读有关已知技术或现有Java工具的信息 这可能对我有所帮助,那将是非常有帮助的。我甚至都不知道该找什么。谢谢!

1 个答案:

答案 0 :(得分:0)

您需要在 lexer 中执行词法分析时处理新关键字。

例如,如果用户输入overload *# POW,您的词法分析者应该能够识别3个令牌:“重载”,“*#”和“POW”。类似地,对于函数创建,你的词法分析器需要对花括号进行标记(花括号之间的空格/换行量是无关紧要的)。

接下来,您需要修改解析器并构建语法树。例如,在3 *# 2上执行语法分析之后,您的语法树应该能够识别运算符是什么以及操作数是什么。

最后一步是运行语法树并解释/评估结果。

对于工具,有词法分析器和解析器生成器。如果您已经为lexer和解析器提供了一些现有代码,我建议您避免使用这些工具,只需对现有代码进行必要的修改。