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

ただし、次のコードのように別の 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 "*")

何を与える?

4

1 に答える 1

1

case ステートメント内に複数の分岐がある場合は、それらを で区切る必要があり[]ます。例えば:

case Head of "+" then
    operator(type:plus)|{Tokenize Tail}
[] "*" then
    operator(type:multiply)|{Tokenize Tail}
end
于 2016-09-14T18:08:23.763 に答える