Ожидаемый конец в заявлении

Следующий код компилируется и запускается как ожидалось:

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
Другие вопросы по тегам