我正在Haskell中编写一个玩具Pascal编译器。我可以生成一个带类型注释的AST。我一直在忽略函数返回值赋值:
function foo:整数;开始 foo:= 12结束;怎么做……
作业可能会多次发生,而Delphi方言也允许阅读。
最好的方法是简单地将函数声明视为声明返回变量的隐式变量,并声明其类型。
然后,您可以分配和读取它,并在过程出口点(过程/函数结束或EXIT关键字)上将值从隐式变量复制到用于返回值的寄存器中。
如果返回值是复数(array,struct)并且不适合寄存器,则典型的解决方案是通过隐式var参数传递返回值。然后,您可以直接将该位置用于返回变量。
后来添加:对于更高级的用户:嵌套在其他函数中的函数是在其父级声明之后,因此可以通过它们获得的帧指针访问其父级返回值。 Pascal嵌套程序可能会相对复杂。