LINUX.ORG.RU

Pretty Printing библиотека для C++

 , pretty printing


0

2

Чем пользуются в с++ чтобы печатать [свой произвольный текст] в стиле Philip Wadler's Pretty Printer ?

Что то один из лучших вариантов которые гуглятся у меня это https://www.haber-kucharsky.com/proj/pretty/index.html но там автор предупреждает что это всё сугубо в порядке эксперимента. Ещё пара вариантов гуглится, но тоже не особо звёзд у них и апдейты лет 5 назад. С одной стороны понятно что зачем там апдейты, оно довольно прямое. С другой стороны, почему звёзд мало? никто не пользуется? Чем тогда пользуются?

В общем то ли в с++ это не очень популярно ,то ли я гуглю криво как то.

Посоветуйте библиотеку что ли или поясните за жизнь..

// Сам с с++ на Вы.

★★★★★

Последнее исправление: AndreyKl (всего исправлений: 2)

для практических целей не выёживаются, а используют что-то готовое (и имеющееся в репах дистрибутива). Как-бы есть astyle

а всякое функционально-глобально-лиспо-хаскело-алгебро оно конечно хорошо, но годится только для публикаций о них самих

и вообще, единственный путь получения валидного и красивого pretty-print:

  • компилятор -> ast
  • ast-> сырой xml
  • сырой xml-> общепонятный, убираем нужное, добавляем лишнее
  • dom+js приводим ссылки,связи в порядок
  • постпроцесс - вывод tex, xhtml, или непосредственная печать
MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от Dr64h

По крайней мере в моём случае только форматирование. В стиле

cout << group(text("AAA") + cut() + text("BBB") + cut() + text("CCC") + cut() + text("DDD") + cut() + text("EEE") + cut() + text("FFF")).fit_to(10);

по идее результат такой
AAA BBB
  CCC DDD
  EEE FFF

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 5)
Ответ на: комментарий от MKuznetsov

а всякое функционально-глобально-лиспо-хаскело-алгебро оно конечно хорошо, но годится только для публикаций о них самих

да нет, вы знаете, очень удобно печатать текст нужной ширины с отсупами (например как код).

т.е. я как бы готов пожертвовать пунктами

сырой xml -> dom + js ->

и остановится на схеме
компилятор -> AST -> непосредственная печать

понимаю , что «нифига себе басню сократили», но ничего честно говоря зазорного в этом не вижу.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 3)
Ответ на: комментарий от AndreyKl

AST->непосредственая печать, ненадо

AST это по природе дерево, дерево отдаётся наружу в xml, на него пишется xslt под оконечное..написать xslt+css даже нифига в них не зная, можно со справочником за пару дней.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

ни разу не видел кодогенератор в виде xslt+css. может не туда глядел..

хотя , конечно, что способ имеет право на существование я отрицать не буду.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от MKuznetsov

в общем я понял, видимо просто никто не пользуется. спасибо за пояснение.

принято видимо xslt+css или вроде того.

Хотя если вот в llvm ir залезть, там в formatted stream выводят когда ассемблер печатают... правда там структура файла довольно плоская, не знаю точно как это работает и на сколько это удобно в общем случае.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 6)
Ответ на: комментарий от MKuznetsov

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

Т.к. в REPL часто работается с текстом. Вычислил выражение. Посмотрел что получилось. Там никакой «алгебры» нету, это просто удобный инструмент, необходимый для того чтобы выводить структуры объектов в отформатированном удобно воспринимаемом виде, с отступами и так далее.

К коду как таковому это не имеет отношения вообще. И ТС не о форматировании кода просит.

TC: для общего случая в C++ нихера нету, т.к. в C++ нет интроспекции

lovesan ★★
()

Эт как в Пуфтоне pprint? Но то для печати объектов Пхитона, не для текста вообще. Не сказать, чтобы оно часто было нужно мне, а в плюсцах и вовсе надо напрячься, чтобы придумать применение. Странно предполагать, что крестовики не сподобились создать что-то нужное, а вот ненужное вполне могли не трогать.

Virtuos86 ★★★★★
()
Ответ на: комментарий от lovesan

я в основном про статью «как-бы невзначай» двигаемую в топике..можно крайне заумно делать через ж-пу, наслаждаясь результатом.

сколько писано парсеров-интерпретаторов, то есть все грабли уже пройдены - если нет стимула изобретать велосипед, то xml и xslt-преобразования, всё решают (весь pretty-print это преобразования из одной структуры в другую).

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

я в основном про статью «как-бы невзначай» двигаемую в топике..

Я в основном хочу распечатать AST представляющее код на одном языке в код на другом языке (не xml/html и Co). И мне городить огород с xml/xslt не очень-то хочется, почему то. Не знаю, может с непривычки (хотя я и умел пользоваться xml/xslt на уровне вполне уверенного пользователя лет 15 назад, когда у некоторых были мысли, что xhtml вытеснит html).

Так вот, то что описано в статье решает мою задачу красиво и хорошо. Так что оно не «как бы невзначай», оно совершенно точно специально там упомянуто, не сомневайтесь, пожалуйста, в этом вопросе.

Вот вопрос навскидку: ну как то ж вы этот xml печатаете? Нельзя ж его тоже с помощью xml/xslt печатать? Отступы там, по ширине выровнять. Но это уже конечно больше вопрос любопытства, я остановился на https://www.haber-kucharsky.com/proj/pretty/index.html , благо вроде работает.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

Эт как в Пуфтоне pprint?

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

Не сказать, чтобы оно часто было нужно мне,

ну, область обычно у этого - форматировать и печатать код. т.е. всякие там редакторы, компиляторы и прочая «околокодовая» обвязка, я бы сказал.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

Я в основном хочу распечатать AST представляющее код на одном языке в код на другом языке

у одного из нас двоих каша в голове :-) и это точно не я

код (текст) красиво напечатать с разметкой ключевых слов, синтаксиса и всяких ссылок+ремарок. С учётом типографских ограничений, переносов и чёрти-чего. ЭТО ОДНО.

перевести код из одного языка в другой - совсем ДРУГОЕ

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

код (текст) красиво напечатать с разметкой ключевых слов, синтаксиса и всяких ссылок+ремарок. С учётом типографских ограничений, переносов и чёрти-чего. ЭТО ОДНО.

Я где то сказал что это мне надо что ли? Мне это не надо.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

Да он, похоже, вообще не вдупляет, о чём речь идёт. Сначала зашёл с code formatter-ом, потом с XML (увидел его по ссылке у тебя?), потом начал загонять про подсветку кода…

Что то один из лучших вариантов которые гуглятся у меня это https://www.haber-kucharsky.com/proj/pretty/index.html но там автор предупреждает что это всё сугубо в порядке эксперимента. Ещё пара вариантов гуглится, но тоже не особо звёзд у них и апдейты лет 5 назад. С одной стороны понятно что зачем там апдейты, оно довольно прямое. С другой стороны, почему звёзд мало? никто не пользуется? Чем тогда пользуются?

В общем то ли в с++ это не очень популярно ,то ли я гуглю криво как то.

Ну тут, в принципе, всё как Лавсан сказал. Так что пробуй какую-нибудь из либ, которые ты нашёл (их там и правда две-три всего есть, судя по всему), либо сразу бери paper и пиши свою реализацию, должно быть не сложно.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Спасибо за пояснение. Да, насчёт написать свою — вроде нашёл что то, если будет работать то ок пока что. Может начальству лицензия не понравится, но тогда будем думать уже позже..

AndreyKl ★★★★★
() автор топика