sweet.js не может вернуть #`else`

main.js

import {另} from './chinese-macros';
另 {
}

Китайский-macros.js

export syntax 另 = function(ctx) {
    return #`else`;
}

main.js должен скомпилироваться в else {} но я получаю это сообщение об ошибке:

throw this.createError(start, "not a valid expression");

Любая помощь будет принята с благодарностью.

1 ответ

Решение

else {} само по себе является недопустимым выражением, поэтому вы получаете это сообщение об ошибке. То, что (я полагаю) вы делаете, пытается заменить то и другое на китайский язык. Итак, предположим, что вы создали макрос для оператора if, компилятор в итоге оценит макрос для if, а затем отдельно для макроса else.

Вместо этого вы должны создать макрос для if/else-if/else утверждение в одном макросе, очень похоже на то, как учебник строит один для cond выражение: http://sweetjs.org/doc/1.0/tutorial.html. Обратите внимание, как они перебирают ключевые слова, начиная с case затем defaultи выдает ошибку, если ни один из этих двух не появляется (неверный синтаксис). Это та же идея, что вы хотите достичь, кроме как делать if, else if, а также else в таком порядке... при добавлении дополнительной обработки ошибок и учета другого синтаксиса.

Другие вопросы по тегам