求〔C++〕表达式分析的有关问题,输入“C++表达式”,输出“语法树”.
求〔C++〕表达式分析的问题,输入“C++表达式”,输出“语法树”...比如输入:a.e - b * c-d + *p输出:+/\-*p/\.*
求〔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