我需要用smalltalk语言构建一个解释器。它将解释一个简单的语言,几乎没有固定的指令集,其中只有2种数据类型,它以后缀方式评估表达式。语言本身是逐行解释的,解释器在遇到错误的指令集时会抛出错误。
请帮助,如何从这个口译员开始。应该使用什么样的数据结构从用户输入中提取数据并根据语言的指令集对其进行评估。
感谢。
答案 0 :(得分:2)
这听起来实在太难了。
使用堆栈可以轻松实现Postfix语言。在Smalltalk中,堆栈可以是OrderedCollection
,您可以使用addLast:
和removeLast
方法。
如果逐行解释语言,则解释器主循环可能类似于:
instructions := sourceCode subStrings: (Character cr asString).
instructions do: [:eachInstruction | ...]
构造代码的一种方法是创建一个Interpreter
类,它具有堆栈成员变量和每种语言指令的方法。
这些指令方法可能类似于:
addInstruction
| op1 op2 |
op1 := stack removeLast.
op2 := stack removeLast.
stack addLast: (op1 + op2).
答案 1 :(得分:1)
如果您正在构建一个后缀表示法解释器,那么您将构建一个前置解释器。 There are loads of links to forth resources here.
答案 2 :(得分:0)
在解释语言本身之前,您应该使用单独的解析器来确保表达式格式正确。 PetitParser可能对此有用。