我有一个想法,可以制作一个简单的程序,它将帮助我处理 C 等语言中的运算符优先级。其中最困难的部分是为表达式加上括号。例如,我想要这个:
*a.x++ = *b.x++
转换成这样:
((*(((a).(x))++)) = (*(((b).(x))++)))
我在以下步骤中手动完成:
*a.x++ = *b.x++
*(a).(x)++ = *(b).(x)++
*((a).(x))++ = *((b).(x))++
*(((a).(x))++) = *(((b).(x))++)
(*(((a).(x))++)) = (*(((b).(x))++))
((*(((a).(x))++)) = (*(((b).(x))++)))
实现这一目标的最佳方法是什么?已经有我可以使用的解决方案了吗?我更喜欢使用 PHP、C、C++、Python 或 Ruby 来完成此操作。
(这不是我的程序的全部想法,这只是第一步。)
您将需要某种能够理解运算符优先级的解析器。 C 的常用版本是 Lexx/Yacc 或 flex/bison,最简单的方法是构造一个解析树。完成此操作后,只需按“预序”顺序遍历解析树,并在进入和离开节点时发出括号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)