类型检查变量和数组

时间:2018-08-28 10:25:32

标签: arrays compiler-construction bison typechecking semantic-analysis

我必须构建一个将Java语言转换为pyhton的编译器。我正在使用Flex和Bison工具。我创建了flex文件,并在Bison中定义了语法语法,以实现一些我必须实现的限制(例如数组,周期管理,类管理,逻辑算术运算符管理等)。在语义分析中,我对变量和数组的类型检查有疑问。我正在使用使用uthash库创建的符号表。这是模块symboltable.h中符号表的结构:

struct symtable{

  char *scopename;            // key 
  struct symtable2 *subtable; // symble table secondary
  UT_hash_handle hh;          // to make the structure hash

}

struct symtable2            // secondary symbol structure
{

  char *name;               // Name of the symbol (key)
  char *element;            // it can be a variable or an array
  char *type;               // Indicates the type assumed by the token (int, float, char, bool)
  char *value;              // value assigned to the variable
  int dim;                  // Array size, it is zero in the case of a variable.
  UT_hash_handle hh;        // to make the structure hash

};

我试图使用解析器中存在的此函数来管理变量之间的类型检查,但当时我无法验证其正确性:

int typeChecking (variable1, variable2) {
   struct symtable2 *s2;

   s2=find_symbol (scopename, variable1);
   if (s2!=NULL) {
     int type1= s2->type;
     char element1 = s2->element;
   }
   else{
     printf("\n\n\033[01;31mVariable 1 not defined.\033[00m\n");
     return -1;
   }

   s2=find_symbol (scopename, variable2);
   if (s2!=NULL) {
     int type2= s2->type;
     char element2 = s2->element;
   }
   else{
     printf("\n\n\033[01;31mVariable 2 not defined.\033[00m\n");
     return -1;
   }

   if(element1=='variable' && element2=='variable'){

     if (type1 == type2){
       return 0;
     }
     else {
       return 1;
     }
   }

   else {
     printf("\n\n\033[01;31m Different elements.\033[00m\n");
     return -1;
   }
  }

现在,我不明白如何对数组元素类型的同质性进行类型检查。 你能给我一些建议吗?我应该使用列表吗?

希望您能帮助我,非常感谢!

0 个答案:

没有答案