读书人

求〔C++〕表达式分析的有关问题输

发布时间: 2013-11-14 22:02:51 作者: rapoo

求〔C++〕表达式分析的问题,输入“C++表达式”,输出“语法树”...
比如输入:
a.e - b * c->d + *p;

输出:


+
/ \
- *p
/\
. *
/\ /\
a e b ->
/\
c d


主要的难点在于,不好判断 *、& 是否是地址运算符还是算术运算符。
举例子: a * b 和 a + *b 中都有 *,如何处理单目运算符??

请不要用递归下降分析法,因为那样会有太多的项。每个优先级都得有一个专门的分析函数。 语法分析?语法树?表达式解析
[解决办法]
mark,帮你顶顶,自己也考虑一下
[解决办法]
还是用LALR吧, 你上面列的几个操作符在 LALR 下都没有二义性.. 你只要不像cpp样把你的脚本也搞个无比无聊的GP的话基本上用 LALR 压力不大 .
随便找个现成的LALR parser 吧, bison 啥的 .. 或者像我一样写个预处理器, 直接在 C 代码里写 EBNF/RegExp 然后自动生成对应的 PDA/DFA .. 我无聊的写了一个支持UNICODE的DFA的生成器 ...

我打算在无聊的时候写一个可以运行在RTOS上的, 多线程的, 可选GC的, 可JIT运行也可以直接生成对应的C语言目标代码的一个脚本.. 脚本的解析器准备用脚本自己自举.. 运行环境用C写..



[解决办法]
用龙书前100页,写一个YACC程序。

如果觉得难,我可以给你我写的参考代码。

我写的这个YACC,对一个复杂到6000个状态的文法集,用40秒(在我原来破机器上)。

[解决办法]
引用:
对于大牛的疑惑............

论坛里真的有大牛么?我所看到的大牛,只是分多一些而已....对于简单的问题,大家都抢着去回答,都以大牛的姿态去指点人家.....对于复杂的问题,都视而不见.........
有木有!!!!!

我的确会选择性回答,但并不是视而不见,只是不想误人子弟而已,因为我本身就不是大牛...论坛的话,主要还是讨论问题,没有说谁一定是对的。除了个别人会以大牛姿态来指点别人,坚持说自己一定是对的,一定要别人相信自己的方法,但这类人毕竟是少数。

你这个问题,用LR(1)、LALR应该都可以,但如果你的输入很复杂的话,还是会有问题的。我对编译原理不熟就不多说了。和楼上说的一样,建议参考下龙书的YACC。
[解决办法]
使用 Flex & Bison,可以解决你这些问题。。easy

读书人网 >C语言

热点推荐