当前位置:编程学习 > JAVA >>

多功能表达式解析器

最近遇到一个棘手的问题:解析表达式(要求:表达式能执行算术运算[+、-、*、/、%],逻辑运算[&&、||、!、!=、>、<、>=、<=、==]),位运算[&、|、^]操作。
求高手指点迷津!! 位运算 表达式 解析 表达式解析 --------------------编程问答-------------------- 编译原理中有个技术叫词法语法分析。 --------------------编程问答-------------------- 这个用到编译原理方面的知识了。
我这有个可以参考的代码,楼主可以参考一下,只能参考哈。
从C语言转换过来的Java版,字符串代数运算器  --------------------编程问答-------------------- --------------------编程问答--------------------
引用 1 楼 fangmingshijie 的回复:
编译原理中有个技术叫词法语法分析。


=====================
为什么要JAVA来做,我一个做C/C++的同事,自己已经开发了一门嵌入式语言,目前在测试阶段,如果有需求,我可以帮你问一下他是怎么实现的。 --------------------编程问答-------------------- 呵呵,我帮你问了,C语言的,慢慢看。
constant_expression
: conditional_expression
;

expression
: logical_or_expression
| expression token_comma logical_or_expression
;

conditional_expression
: logical_or_expression
| logical_or_expression token_question constant_expression token_colon constant_expression
;

logical_or_expression
: logical_and_expression
| logical_or_expression token_compare_or logical_and_expression
;

logical_and_expression
: inclusive_or_expression
| logical_and_expression token_compare_and inclusive_or_expression
;

inclusive_or_expression
: exclusive_or_expression
| inclusive_or_expression token_or exclusive_or_expression


exclusive_or_expression
: and_expression %prec lower_than_and
| exclusive_or_expression token_xor and_expression %prec lower_than_and


and_expression
: equality_expression
| and_expression token_and equality_expression
;

equality_expression
: relational_expression
| equality_expression token_compare_equal relational_expression
| equality_expression token_compare_no_equal relational_expression
;

relational_expression
: shift_expression
| relational_expression token_left_angle shift_expression
| relational_expression token_right_angle shift_expression
| relational_expression token_compare_less_equal shift_expression
| relational_expression token_compare_grate_equal shift_expression
;

shift_expression
: additive_expression %prec lower_than_additive
| shift_expression token_left_shift additive_expression %prec lower_than_additive
| shift_expression token_right_shift additive_expression %prec lower_than_additive
;

additive_expression
: multiplicative_expression
| additive_expression token_add multiplicative_expression
| additive_expression token_sub multiplicative_expression
;

multiplicative_expression
: cast_expression
| multiplicative_expression token_mul unary_expression
| multiplicative_expression token_div unary_expression
| multiplicative_expression token_mod unary_expression
;

cast_expression 
: unary_expression %prec lower_than_right_round
| token_cast token_left_angle type_id token_right_angle token_left_round unary_expression token_right_round


unary_expression
: postfix_expression %prec lower_than_self
| token_inc cast_expression 
| token_dec cast_expression 
| unary_operator cast_expression 


unary_operator
: token_and
| token_sub
| token_negate
| token_tilde
;

postfix_expression
: primary_expression
| postfix_expression token_inc
| postfix_expression token_dec


primary_expression
: literal
| call_specifier
| token_left_round constant_expression token_right_round
;
每个编译器里都有这些文法
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,