为什么这个EBNF语法含糊不清?

时间:2016-08-18 17:14:05

标签: grammar context-free-grammar operator-precedence bnf ebnf

当我遇到这个问题时,正在参加考试并查看过去的论文。

  

以下是EBNF中描述简单算术的语法   表达式,如1 + 2 * 3 - 4:

Expression = Operand, {Operator, Operand}; 
Operand = "1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"; 
Operator = "+"|"-"|"*"|"/"; 
     

(iv)使用这种语法,有多种方法可以评估表达式,如1 + 2 * 3 - 4.描述其中两种,并解释一下   这意味着提供的语法。 [2分]

据我所知,模糊语法意味着存在多个最左侧或最右侧的推导,这通常意味着语法的优先顺序存在一些模糊性。但这里没有优先权,递归是线性的。

么?

1 个答案:

答案 0 :(得分:1)

您的问题中有部分答案。

是;你几乎有一个模糊语法的正确定义。如果执行语法的最左侧和最右侧派生,则应生成相同的分析树。

是;当你认为这意味着语法的优先顺序有问题时,你几乎是正确的,是的,这个语法没有任何问题。其中存在的问题是:运算符都具有相同的优先级,因此不同的推导将导致评估示例的不同答案。

我们可以将(1+2) * (3-4) 1 + (2 * 3) - 4 1 + (2 * (3 - 4)) 缩减为:

track by

取决于如何处理运算符的优先级。

如果你明确地画出最左边和最右边的缩减并因此导出解析树,它将更清晰。这通常是学生在这样的考试问题中为满分做的事情。因此,我将此作为修订工作。