1.1 语法成分检查

该部分检查是为了弥补语法分析,对一些含义不明的语法成分进行更加具体的分类,便于后续语义分析和代码生成

1.1.1 _VariantReference种类检查

首先需要在_VariantReference的节点定义中添加string kind域,表示变量引用的具体类型,还添加了int locFlag域,当取值为-1时,表示当前变量引用出现在了赋值语句的左侧,其它情况均用取值为1来表示。
由于语法分析时,无法得知语义信息,所以许多语法成分都被归到了_VariantReference节点类中。可能是变量、常量、数组元素引用、函数调用时作为右值、函数返回值中作为左值。所以kind的取值情况如下:

variantReference的种类 kind取值
变量 var
常量 constant
数组元素 array
函数无参调用,作为右值 function call
函数返回值语句,作为左值 function return reference

当_Expression的type取值为“var”时,该表达式就是由_VariantReference构成的最简单的表达式,即退化为了_VariantReference的情形。

1.1.2 _Statement是否是返回语句

扩充_Statement的类定义,加入bool isReturnStatement域。

1.1.2.1 赋值语句

如果赋值语句的左值是当前所在的函数名,即对左值_VariantReference进行语义检查,发现其是当前所在的函数名,则该赋值语句是一条返回值语句。

1.1.2.2 过程调用

如果是exit过程调用,则该过程调用语句就是返回语句。出现在过程定义中时,exit应不带实参;出现在函数中时,exit应带一个实参。