2011-04-05 17 views
0

我正在构建一个小规模的解释器。到目前为止,我有能力计算数学表达式,包括 变量和几个函数(如MOD,MAX等)。我需要增加两个功能:实现操作符重载和内联函数

在线运算符重载运算符 重载是指 新的运营商,其 有你 现有功能

因此,例如一个的功能创建一个术语输入过载 后*#POW,3 *#2将导致9

联函数创建另外 到操作符重载,你还会 需要苏pport内联功能 creation4。换句话说,你会 支持新的功能, 使用以下语法创建:直列 _FUNC {@ ARG1,ARG2 @ ...}

所以,我不知道从哪里开始。如果任何人都可以将我链接到某处,那么我可以阅读有关已知技术或现有的可帮助我的java工具 ,这将非常有帮助。我甚至不知道要寻找什么。谢谢!

+5

你之前询问过13个问题,甚至没有收到过其中之一 – dacwe 2011-04-05 16:52:23

+0

这是功课吗?如果是这样,请用“家庭作业”标签标记问题。 – 2011-04-05 16:59:43

+1

我不知道我应该接受。我现在会研究它 – yotamoo 2011-04-05 17:00:12

回答

0

你需要处理的新的关键词,而在你的词法分析器执行词法分析。例如,如果用户输入overload *# POW,则词法分析器应该能够识别3个标记:“overload”,“*#”和“POW”。同样,对于函数的创建,你的词法分析器需要标记大括号(大括号之间的空白/换行符不重要)。

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

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

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