Как работать со списком возвращаемых значений в ANTLR - PullRequest
5 голосов
/ 17 апреля 2009

Как правильно решить эту проблему в ANTLR:

У меня есть простое правило грамматики, скажем, для списка с произвольным числом элементов.

list
: '[]' 
| '[' value (COMMA value)* ']'

Если я хотел назначить возвращаемое значение для списка, и было ли это значение фактическим списком возвращаемых значений из производства, каков правильный способ сделать это? Альтернативы, которыми я занимаюсь:

  • создать свой собственный стек в глобальной области видимости, чтобы отслеживать эти списки
  • Попытайтесь осмотреть узлы дерева подо мной и извлечь информацию таким образом
  • Получите доступ к нему некоторым приятным и классным способом, который я надеюсь выяснить, в котором я могу получить легкий доступ к такому списку в рамках действия, связанного с правилом.

Наверное, вопрос в том, как это делают классные дети?

(К вашему сведению, я использую Python API для ANTLR, но если вы нажмете меня на другом языке, я справлюсь с этим)

Ответы [ 2 ]

5 голосов
/ 17 апреля 2009

В C # это может выглядеть так:

list returns [ List<string> ValueList ]
    @init
    {
        $ValueList = new List<string>();
    }
    : '[]'
    | '[' value {$ValueList.Add(value);} (COMMA value {$ValueList.Add(value);})* ']'
    ;
1 голос
/ 24 мая 2009

Я думаю, что более простой способ может быть

list returns [ List values ]
: '[]' 
| '[' vs+=value (COMMA vs+=value)* ']' {
        $values = $vs;
}
...