我必须构建一个将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;
}
}
现在,我不明白如何对数组元素类型的同质性进行类型检查。 你能给我一些建议吗?我应该使用列表吗?
希望您能帮助我,非常感谢!