Ожидаемый конец в заявлении
Следующий код компилируется и запускается как ожидалось:
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
Однако, если я добавлю еще одно предложение case, например, приведенный ниже код, я получу сообщение об ошибке при компиляции пропущенного оператора '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