私は式(かっこを含む)を解析する方法を知っています。 しかし、通常は解析式は「オペランド演算子オペランド」とみなします。 F.e. :式の解析!演算子の連鎖
5 + 12
(5 * 6) + 11
(3 + 4) + (5 * 2)
ご覧のとおり、値は常に2です。 私が探しているのは、類似の演算子のチェーンを1つのアイテム、つまり欲張りとして解析できるよりも、メカニズム(文法)です。 F.e.
5 + 4 + 2 + 7 * 6 * 2
=> sum(5 + 4 + 2)
+
=> mult(7 * 6 * 2)
私はパーサは1つの「アクション」、乗算のための同じよう合計をガツガツしたい:私は次の式を持っているとしましょう。ここで
はNON-作業文法の一例ですが、あなたは私が何をしたいのアイデアを得ることが可能かもしれ(のpython - LEPLモジュール):
def build_grammar2(self):
spaces = Token('[ \t]+')[:]
plus = Token('\+')
left_bracket = Token('\(')
right_bracket = Token('\)')
mult = Token('\*')
bit_var = Token('[a-zA-Z0-9_!\?]+')
# with Separator(~spaces):
expr, group2 = Delayed(), Delayed()
mul_node = bit_var & (~mult & bit_var)[1:] > Node
add_node = bit_var & (~plus & bit_var)[1:] > Node
node = mul_node | add_node
parens = ~left_bracket & expr & ~right_bracket
group1 = parens | node
add = group1 & ~plus & group2 > Node
group2 += group1 | add
mul = group2 & ~mult & expr > Node
expr += group2 | mul
self.grammar = expr
を、質問は答えが広すぎる。 (あなたがKleeneの星を使って 'term( '+' term)*' "を使うパーサーを見つけるのが有益だと思わない限り) – rici