struct BiNode
{
char data
BiNode *lchild, *rchild
}
typedef BiNode *BiTree
int CreateBiTree(BiTree &T, const char *s1, const char *s2, int len)
{
if (len<=0)
{
T = NULL
return 1
}
else
{
T = new BiNode
T->data = *s1
int i
for ( i=0i<leni++) if (s2[i]==*s1) break
CreateBiTree(T->lchild, s1+1, s2, i)
CreateBiTree(T->rchild, s1+i+1, s2+i+1, len-(i+1))
}
return 1
}
int DestroyBiTree(BiTree &T)
{
if (T==NULL) return 1
DestroyBiTree(T->毁桥滑lchild)
DestroyBiTree(T->rchild)
delete T
T = NULL
return 1
}
int ATraverse(BiTree &T)
{
if (T==NULL) return 1
ATraverse(T->lchild)
ATraverse(T->rchild)
cout<<T->data
return 1
}
main()
{
char a[2000],b[2000]
while(cin>>a>>b)
{
BiTree T
int count=0
int n
for(n=0a[n]!='\0'n++)
CreateBiTree(T,a,b,n)
ATraverse(T)
cout<<纤腊" "
cout<<消手endl
DestroyBiTree(T)
1、逆波兰表示
逆波兰表示又称后缀表示法,它是最简单的一种中间代码表示形式,早在编译程序出现之前,它就用于表示算术表达式。
2、四元式
四元式也是一种比较普遍采用的中间代码形式,其形式为:(OP,ARG1,ARG2,RESULT)。其中:OP为运算符,ARG1为第一运算对象,ARG2为第二运算对象,RESULT为运算结果。
3、三元式
三元式表示是与四元式类似的一种表示法,所不同的仅是三元式中没有表示运算结果的部分,凡要涉及到运算结果的均用三元式的位置或序号来代替。
三元式的形式为:(OP,ARG1,ARG2),其中,OP为运算符,ARG1为第一运算对象,ARG2为第二运算对象旅搭。运算对象ARG1,ARG2可以是变量名,也可以是三元式的编号。
扩展资料:
中间代码相关延伸:代码优化-优化所涉及的源程序的范围
局部优化 — 基本块内优化;
循环优化 — 隐式、显式循环体内优化;
全局优化 — 一个源程序范围内优化;
优化相对于编译逻辑功能实现的阶段,中间代码级 — 目标代码生成前的优化;目标代码级 — 目标代码生成后的优化。
参考资料来源:百度百科-代码优化
参考枝旅资料来猛镇凳源:百度百科-中间语言
你只要找到书上的关于for的文法和属性文法,然后稍微简化一下孝橡洞,比如布尔表达式弄成一个就好了,先不管属性文法,只如袜要看文巧枯法,排出优先关系就可以用自底向上的方法分析了,在规约的过程中执行属性文法,也就是语义动作就可以了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)