嗨我知道如何解析表達式(包括括號)。 但通常解析表達式假定「操作數運算符操作數」。 F.e. :解析表達式!運營商鏈
5 + 12
(5 * 6) + 11
(3 + 4) + (5 * 2)
正如你所看到的值總是兩個。 我在尋找的是機制(語法),可以解析類似的運算符鏈作爲一個單一的項目,即貪婪 F.e.讓說我有以下表現:
5 + 4 + 2 + 7 * 6 * 2
=> sum(5 + 4 + 2)
+
=> mult(7 * 6 * 2)
我想解析器狼吞虎嚥之和爲一個單一的「行動」,同爲乘法。
這是不工作的語法的一個例子,但可能是你能得到什麼,我想要做的想法(蟒蛇 - 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