2014-10-13 2 views
2

Один из элементов в моем списке TODO создает забавный язык кодирования, который «компилируется» на JavaScript. Я хотел бы попробовать Sweet.js для этого, но мне интересно, можно ли написать правило, которое предназначено для ключевых слов, которые являются до правилом?Sweet.js: макрос, предназначенный для переменных перед токенами?

В качестве примера предположим, что вы хотите создать JavaScript в стиле Yoda. Источник линия может выглядеть следующим образом:

six var is; 

бы быть сопоставлен

var six; 

Возможно ли это с помощью Sweet.js?

+0

Вы можете сделать это, если вы замените 'var' каким-либо другим словом, но не используете' var' - не знаете, почему это так. –

+0

Не могли бы вы привести пример этого? – thomaux

ответ

3

Да, вы хотите использовать infix макросы:

let var = macro { 
    rule infix { $x:ident | is } => { 
     var $x; 
    } 
} 

six var is 

Если вы хотите is быть макрос вместо var очевидным, что было бы:

let is = macro { 
    rule infix { $x:ident var | } => { 
     var $x; 
    } 
} 

Но это Безразлично» t действительно работает. Причина, по которой он не работает, заключается в том, что var ... специальный. В принципе, поскольку var создает новое связующее, макросы не расширяются в позициях идентификатора var. Поэтому, когда экспандер видит var is, он пытается создать новую связанную переменную с именем is вместо расширения макроса is.

Использование infix var макрос должен работать для вас.

+0

Спасибо, не знали о операторах инфикса! – thomaux

Смежные вопросы