对于下面文法:Expr->-Expr、Expr->(Expr)|Var ExprTail、ExprTail->-Expr|ℰ、Var->id VarTail、VarTail->(Expr)|ℰ。给出对句子id--id((id))的分析过程。
时间: 2023-06-12 09:08:01 浏览: 79
使用自顶向下的语法分析方法,对句子id--id((id))进行分析过程如下:
1. 将句子作为输入传入分析器中,从起始符号 Expr 开始进行推导。
2. 根据产生式 Expr->Var ExprTail,使用产生式 Var->id VarTail 推导出 Var,此时 VarTail 为 ℰ。
Expr -> Var ExprTail
-> id VarTail ExprTail (使用 Var->id VarTail)
3. 根据产生式 ExprTail->ℰ,使用产生式 VarTail->(Expr) 推导出 (Expr)。
Expr -> id VarTail ExprTail
-> id (Expr) ExprTail (使用 VarTail->(Expr) 和 ExprTail->ℰ)
4. 根据产生式 Expr->-Expr,使用产生式 Expr->(Expr)|Var ExprTail 推导出 -Expr。
Expr -> -Expr
-> -(Expr) (使用 Expr->(Expr)|Var ExprTail 和上一步的结果)
5. 根据产生式 Expr->Var ExprTail,使用产生式 Var->id VarTail 推导出 Var,此时 VarTail 为 ℰ。
Expr -> -Expr
-> -(Var ExprTail) (使用 Expr->Var ExprTail 和上一步的结果)
-> -(id VarTail ExprTail) (使用 Var->id VarTail 和上一步的结果)
6. 根据产生式 ExprTail->-Expr,使用产生式 VarTail->ℰ 推导出 ℰ。
Expr -> -(id VarTail ExprTail)
-> -(id) (使用 ExprTail->-Expr 和 VarTail->ℰ)
7. 根据产生式 Expr->-Expr,使用产生式 Expr->(Expr)|Var ExprTail 推导出 -Expr。
Expr -> --Expr
-> --(id) (使用 Expr->(Expr)|Var ExprTail 和上一步的结果)
8. 根据产生式 Expr->Var ExprTail,使用产生式 Var->id VarTail 推导出 Var,此时 VarTail 为 ℰ。
Expr -> --(Var ExprTail)
-> --(id VarTail ExprTail) (使用 Expr->Var ExprTail 和上一步的结果)
9. 根据产生式 ExprTail->ℰ,分析结束。
Expr -> --(id VarTail) (使用 ExprTail->ℰ 和上一步的结果)
-> --(id) (使用 VarTail->ℰ 和上一步的结果)
因此,句子id--id((id))的分析结果为 --(id)。