я нашел старый файл, определить Antlr правила грамматики так:Weird ANTLR правило грамматики
rule_name[ ParamType *param ] > [ReturnType *retval]:
<<
$retval = NULL;
OtherType1 *new_var1 = NULL;
OtherType2 *new_var2 = NULL;
>>
subrule1[ param ] > [ $retval ]
| subrule2 > [new_var2]
<<
if(new_var2 == SOMETHING){
$retval = something_related_to_new_var2;
}
else{
$retval = new_var2;
}
>>
{
somethingelse > [new_var_1]
<<
/* Do something with new_var_1 */
$retval = new_var_1;
>>
}
;
Я не эксперт Antlr и это первый раз, когда я вижу этот вид семантического для правила определение. Кто-нибудь знает, где я могу найти документацию/информацию об этом? Даже ключевое слово для поиска Google приветствуется.
Редактировать: Должно быть ANTLR Version 1.33MR33.
Вы уверены, что это на самом деле грамматика ANTLR? Я больше не помню, что такое синтаксис с ранними версиями ANTLR, но если вы замените << and >> фигурными фигурными скобками (описывающими действие), они близки к тому, что использует ANTLR 3. Однако var init наверху странно странно, потому что теперь вы определили, что перед правилом двоеточие. А также параметр decl выглядит незнакомым. –
Да. Это должна быть версия ANTLR 1.33MR33. – Espanico