2015-10-08 2 views
0

я нашел старый файл, определить 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.

+0

Вы уверены, что это на самом деле грамматика ANTLR? Я больше не помню, что такое синтаксис с ранними версиями ANTLR, но если вы замените << and >> фигурными фигурными скобками (описывающими действие), они близки к тому, что использует ANTLR 3. Однако var init наверху странно странно, потому что теперь вы определили, что перед правилом двоеточие. А также параметр decl выглядит незнакомым. –

+0

Да. Это должна быть версия ANTLR 1.33MR33. – Espanico

ответ

1

Хорошо, я нашел! Вот руководство:

http://www.antlr2.org/book/pcctsbk.pdf

цитирует интересную часть PDF, что ответ на мой вопрос.

1) Страница 47:

poly > [float r] 
: <<float f;>> 
term>[$r] ("\+" term>[f] <<$r += f;>>)* 
; 

Правило поли определяется, чтобы иметь значение, возвращаемое под названием $ г через "> [R] с плавающей точкой" обозначений; это похоже на символ перенаправления вывода оболочек UNIX. Установка значения $ r устанавливает возвращаемое значение poly. он первым действием после того, как «:» является init-действием (потому что это первое действие правила или subrule). Действие init определяет локальную переменную f, которая будет использоваться в цикле (...) * для хранения возвращаемого значения этого термина.

2) Page 85:

Правило выглядит следующим образом:

rule : alternative1 
| alternative2 
... 
| alternativen 
; 

, где каждая альтернатива производство состоит из списка элементов, которые могут быть ссылки на правила, ссылки на жетоны, действия, предикаты , и субрулы. Аргумент и возвращаемое значение определение выглядит следующим образом, где есть п аргументы и т возвращаемые значения:

rule[arg1,...,argn] > [retval1,...,retvalm] : ... ; 

Синтаксиса для использования правила зеркал его определения:

a : ... rule[arg1,...,argn] > [v1,...,vm] ... 
; 

Здесь различные VI получить возвращает значения из правила правила, каждое vi должно быть l-значением.

3) Page 87:

действия имеют вид < < ... >> и содержат предоставленный пользователем C или C++ код, который должен выполняться во время синтаксического анализа.

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