2016-09-14 1 views
0

は期待通りに動作します:予想「末端には、」次のコードはコンパイルし

fun {Tokenize Lexemes} 
     case Lexemes of 
     Head|Tail then 
      case Head of 
      "+" then 
       operator(type:plus)|{Tokenize Tail} 
      else 
       if {String.isFloat Head} then 
        number(Head)|{Tokenize Tail} 
       else 
        nil 
       end 
      end 
     else 
      nil 
     end 
    end 

をしかし、私は以下のコードのような別のケース句を、追加した場合、行方不明についてコンパイルするとき、私はエラーを取得します " end 'ステートメント。

fun {Tokenize Lexemes} 
     case Lexemes of 
     Head|Tail then 
      case Head of 
      "+" then 
       operator(type:plus)|{Tokenize Tail} 
      "*" then 
       operator(type:multiply)|{Tokenize Tail} 
      else 
       if {String.isFloat Head} then 
        number(Head)|{Tokenize Tail} 
       else 
        nil 
       end 
      end 
     else 
      nil 
     end 
    end 

エラー:

** expected 'end' 
** inside case phrase (at the line of the "*") 

できますか?

答えて

1

ケースステートメント内に複数のブランチがある場合は、それらを[]で区切る必要があります。例:

case Head of "+" then 
    operator(type:plus)|{Tokenize Tail} 
[] "*" then 
    operator(type:multiply)|{Tokenize Tail} 
end 
関連する問題