pretty printer и комментарии
От: yacc  
Дата: 23.05.05 06:34
Оценка:
здравствуйте.

помогите plz советом.
есть pretty printer некоего языка. реализация — LR-анализатор, строится дерево, потом обходится и нужным образом печатается.

всё бы ничего — но проблема с комментариями.
приходит в голову модифицировать грамматику на предмет добавления их во все возможные места, но как-то это нехорошо.
может кто-то знает решнеие получше?

спасибо.
Re: pretty printer и комментарии
От: Lafkadio Россия  
Дата: 23.05.05 08:24
Оценка:
Здравствуйте, yacc, Вы писали:
Y>всё бы ничего — но проблема с комментариями.
Y>приходит в голову модифицировать грамматику на предмет добавления их во все возможные места, но как-то это нехорошо.
Y>может кто-то знает решнеие получше?
Уточните в чем состоит проблема, ваша грамматика не учитывала комментарии, а потом вы их добавили? И вам нужно их обработать?
Если комментарии печатать не нужно, просто считайте их разделительными символами.
Если же их необходимо напечатать, то проблема, как я понял, в том что они могут появиться внутри любой из конструкций(как /* .... */ в С++), попробйте все равно считать их разделителем, а при печати для разделитей представляющих собой комментарии ввести отдельную функцию печати.
Re[2]: pretty printer и комментарии
От: yacc  
Дата: 23.05.05 08:45
Оценка:
L> Уточните в чем состоит проблема, ваша грамматика не учитывала комментарии,
L> а потом вы их добавили? И вам нужно их обработать?
спасибо за Ваш ответ. уточняю: комментарии печатать нужно. раньше они просто отбрасывались.
специфика такая, что к уже построенному ast применяются разные шаблоны форматирования.
вот пример:
where A = B -- blah-blah-blah
  and C = D -- qwerty

может быть отображено так:
where A = B and -- blah-blah-blah
      C = D     -- qwerty

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

спасибо.
Re[3]: pretty printer и комментарии
От: Lafkadio Россия  
Дата: 23.05.05 08:56
Оценка:
Здравствуйте, yacc, Вы писали:

Y>специфика такая, что к уже построенному ast применяются разные шаблоны форматирования.

Y>вот пример:
Y>
Y>where A = B -- blah-blah-blah
Y>  and C = D -- qwerty
Y>

Y>может быть отображено так:
Y>
Y>where A = B and -- blah-blah-blah
Y>      C = D     -- qwerty
Y>

Место печати комментария определяется уже после построения дерева разбора, на основании какой-то внешней информациии? То есть положение комментария в отличии от других элементов может кочевать?
Re[4]: pretty printer и комментарии
От: Аноним  
Дата: 23.05.05 09:49
Оценка:
L>Место печати комментария определяется уже после построения дерева разбора, на основании какой-то внешней L>информациии? То есть положение комментария в отличии от других элементов может кочевать?
точно). комментарий в примере выше относится к одной из частей составного условия.
меня в принципе интересовали скорее ссылки на готовые исходники — посмотреть как это делают другие,
сам ничего толкового найти не смог(
Re[3]: pretty printer и комментарии
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.05.05 06:03
Оценка: 2 (1)
Здравствуйте, yacc, Вы писали:

L>> Уточните в чем состоит проблема, ваша грамматика не учитывала комментарии,

L>> а потом вы их добавили? И вам нужно их обработать?
Y>спасибо за Ваш ответ. уточняю: комментарии печатать нужно. раньше они просто отбрасывались.
Y>специфика такая, что к уже построенному ast применяются разные шаблоны форматирования.
Y>вот пример:
Y>
Y>where A = B -- blah-blah-blah
Y>  and C = D -- qwerty
Y>

Y>может быть отображено так:
Y>
Y>where A = B and -- blah-blah-blah
Y>      C = D     -- qwerty
Y>

Y>я имею в виду что структура строк в исх.файле до какого-то этапа не учитывалась,
Y>но в данном случае она важна. вопрос — что делать.
Ну, по идее надо привязывать комментарии к нодам AST. Примерно таким образом:
— многострочные комменты (/**/) составляют отдельный node AST,
— однострочные комменты (-- ) привязываются как свойство к тому ноду, который в начале строки.
Насчет первого я не очень уверен, возможно не подойдет для сложных случаев типа
call f(x, y /*, z*/,/*w*/k)

Со вторым тонкость при выводе: их надо рисовать справа от той строки, где начал выводиться node, к которому они привязаны. Если в строку попали несколько node, то коммент склеивается: В твоем примере привязка должна быть к where, и может привести к таким результатам:
where A = B and -- blah-blah-blah
  C = D -- qwerty

where A = B and C = D -- blah-blah-blah qwerty
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.