Racket 语法中的歧义

Racket 语法中的歧义,racket,ambiguous,ambiguous-grammar,Racket,Ambiguous,Ambiguous Grammar,我正在学习语法中的歧义,我需要一些帮助来更好地理解。这里有一个语法: <S> ::= if <S> then <S> <S> ::= if <S> then <S> else <S> <S> ::= a ::=if then :=如果是,则为else :=a 使用解析树或最左边的派生,如何显示该语法是不明确的 考虑以下几点: if a then if a then a else a 你可以考虑将

我正在学习语法中的歧义,我需要一些帮助来更好地理解。这里有一个语法:

<S> ::= if <S> then <S>
<S> ::= if <S> then <S> else <S>
<S> ::= a
::=if then
:=如果是,则为else
:=a

使用解析树或最左边的派生,如何显示该语法是不明确的

考虑以下几点:

if a then if a then a else a
<>你可以考虑将它分为以下两种方式:

(if a then (if a then a else a))


这两种方法在您提供的语法中都是可能的,因此它是不明确的。

尝试将
if
语句嵌套在不同的组合中,并为每一种语句考虑是否可以用多种相互冲突的方式在其上加上“括号”
(if a then (if a then a) else a)