我正在 ubuntu 中开发一个带有 flex 和 bisonc++ 的“玩具”编译器,它将类似 C 的输入语言编译成优化的 C++。在输入语言中包含一个 main 函数(必须有)并且可以在 main 之外有 optionals 函数,例如:
int myFunc1()
{
// some functionality
}
int main()
{
}
void myFunf2()
{
// some functionality
}
在语义分析部分我遇到了麻烦,我不知道如何处理范围,我现在不知道我应该提供什么样的符号表结构或者我应该为这个问题创建什么样的数据结构。我的问题有一个复杂的案例(语义分析部分):
int Name() // here "Name" is a function name
{
int Name = 0; // Here Name is a variable name
return Name // the function returns with the variable
}
int main()
{
int Name = 5; // Here name is a variable name, it is not the same variable which is in the Name()
function, it is a **different** **variable**
if ()
{
// int Name = 6; <- Name variable cannot be redeclared in this inner if block
// A variable can be declared once in a function it cannot be redeclared in an if, while, etc. block
}
}
void Name2()
{
int Name = 55; // here Name is also a different variable from the others
}