2016-09-14 95 views
0

下面的代码编译并运行正常:预计在case语句“端”

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 

但是,如果我再添加一个实例条款,如下面的代码,我编译关于丢失时,得到一个错误“结束“声明。

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语句中有多个分支,则必须将它们与[]分开。例如:

case Head of "+" then 
    operator(type:plus)|{Tokenize Tail} 
[] "*" then 
    operator(type:multiply)|{Tokenize Tail} 
end