最近遇到一个棘手的问题:解析表达式(要求:表达式能执行算术运算[+、-、*、/、%],逻辑运算[&&、||、!、!=、>、<、>=、<=、==]),位运算[&、|、^]操作。
求高手指点迷津!!位运算表达式解析表达式解析

解决方案 »

  1.   

    这个用到编译原理方面的知识了。
    我这有个可以参考的代码,楼主可以参考一下,只能参考哈。
    从C语言转换过来的Java版,字符串代数运算器 
      

  2.   


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

  3.   

    呵呵,我帮你问了,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
    ;
    每个编译器里都有这些文法