помогите plz советом.
есть pretty printer некоего языка. реализация — LR-анализатор, строится дерево, потом обходится и нужным образом печатается.
всё бы ничего — но проблема с комментариями.
приходит в голову модифицировать грамматику на предмет добавления их во все возможные места, но как-то это нехорошо.
может кто-то знает решнеие получше?
Здравствуйте, yacc, Вы писали: Y>всё бы ничего — но проблема с комментариями. Y>приходит в голову модифицировать грамматику на предмет добавления их во все возможные места, но как-то это нехорошо. Y>может кто-то знает решнеие получше?
Уточните в чем состоит проблема, ваша грамматика не учитывала комментарии, а потом вы их добавили? И вам нужно их обработать?
Если комментарии печатать не нужно, просто считайте их разделительными символами.
Если же их необходимо напечатать, то проблема, как я понял, в том что они могут появиться внутри любой из конструкций(как /* .... */ в С++), попробйте все равно считать их разделителем, а при печати для разделитей представляющих собой комментарии ввести отдельную функцию печати.
L> Уточните в чем состоит проблема, ваша грамматика не учитывала комментарии, L> а потом вы их добавили? И вам нужно их обработать?
спасибо за Ваш ответ. уточняю: комментарии печатать нужно. раньше они просто отбрасывались.
специфика такая, что к уже построенному ast применяются разные шаблоны форматирования.
вот пример:
where A = B -- blah-blah-blahand C = D -- qwerty
может быть отображено так:
where A = B and-- blah-blah-blah
C = D -- qwerty
я имею в виду что структура строк в исх.файле до какого-то этапа не учитывалась,
но в данном случае она важна. вопрос — что делать.
Здравствуйте, 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>информациии? То есть положение комментария в отличии от других элементов может кочевать?
точно). комментарий в примере выше относится к одной из частей составного условия.
меня в принципе интересовали скорее ссылки на готовые исходники — посмотреть как это делают другие,
сам ничего толкового найти не смог(
Здравствуйте, 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>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.