2015-05-11 10 views
0

Я ищу абстрактную часть дерева разбора на карте. В частности, я хочу что-то конкретное, как это:Использование типа карты в Аннотация Синтаксис

syntax RecType = RECORD: "{" {(Ident "=" Num) ";"}* "}" 

Где давайте просто скажем, Ident и Num и str и int соответственно.

забираемой на что-то вроде:

public data RECTYPE = RECORD(map[str, int] rec); 

Является ли это что-то можно? Я получаю от этого некоторые ошибки конструктора.

Спасибо!

ответ

1

У вас есть два вопроса:

  1. Почему не это определение работы?
    Имена для производства в грамматике должны начинаться с символов нижнего регистра, чтобы избежать двусмысленности в написании правил отклонения. (Аналогично, имена символов должны начинаться с символа верхнего регистра).
  2. Как перевести дерево разбора в АСТ?
    У нас есть функция implode, которую вы можете использовать для перевода дерева синтаксиса на аст. Однако AST должен тщательно моделировать вашу грамматику. Если я прав, это не приведет к переводу ваших пар ключ-значение на карту. Вам придется вручную записать преобразование в желаемый АСТ. (Это не так сложно, посмотрите this recipe for an example)
Смежные вопросы