Умная документация алгоритма Отступа?

У меня была подобная проблема, я решил ее как это:

#include <string.h>

extern void foo(char* m);

int main() {
    // warning: deprecated conversion from string constant to ‘char*’
    //foo("Hello");

    // no more warning
    char msg[] = "Hello";
    foo(msg);
}

это соответствующий способ решить это? У меня нет доступа к foo для адаптации его для принятия const char*, хотя это было бы лучшим решением (потому что foo не изменяется m).

15
задан Sam Harwell 26 August 2009 в 02:13
поделиться

4 ответа

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

Так что, боюсь, я могу Технически я не могу дать ответ, поскольку я не нашел никаких научных работ, но как своего рода мета-ответ (к сожалению, в форме вопроса): это что-то сложнее, чем разбор языка? Я использую термин «сложнее» в неопределенном смысле вычислимости / сложности, не имея в виду фактическое время / усилия / слезы, которые человек фактически вложил бы.

Учтите: по моему опыту, изменение уровня отступов в определенных подпунктах . Если операторы, циклы, классы, структуры и т. д. и т. д. Все это уже обнаружено парсером. Подобно тому, как можно украсить дерево синтаксического анализа для построения семантического дерева (вот фрагмент случайного университетского веб-сайта ), разве вы не можете вместо этого украсить дерево синтаксического анализа «информацией об отступах»?

Я думаю Я просто не понимаю, зачем нужны академические статьи. Если, конечно, я чего-то упускаю. Что вполне возможно, поскольку я никогда не осмеливался делать это. :) Но с моей точки зрения могло показаться, что этот умный отступ возможен просто путем запуска модифицированного синтаксического анализатора, и вместо того, чтобы сообщать "ошибки синтаксического анализа", он автоматически переформатирует код так, чтобы он был действительным (при условии, что "настоящий "парсер уже исправляет блок). Работа в реальном времени наверняка вызовет проблемы, и есть неоднозначные уровни отступа в языке, зависящем от пробелов (поскольку уровень отступа является концом блока).

В качестве последнего (честно говоря, я почти закончил! :)) : Редактор текста Emacs шокирующе хорош, по моему опыту. Я понятия не имею, как это работает, но если бы я попробовал это, я бы в первую очередь посмотрел ... после SO, конечно. :))

1
ответ дан 1 December 2019 в 04:53
поделиться

Вам потребуется потоковая передача содержимого файла пользователю при чтении его с S3 ведро / объект.

Если вы используете библиотеку AWS :: S3 , может сработать что-то вроде этого:

 send_file_headers!( :length=>S3Object.about(<s3 object>, <s3 bucket>)["content-length"], :filename=><the filename> )
 render :status => 200, :text => Proc.new { |response, output|
   S3Object.stream(<s3 object>, <s3 bucket>) do |chunk|
     output.write chunk
   end
 }

Этот код в основном копируется из кода send_file, который сам по себе работает только для локальных файлов или файлов -подобные объекты

NB В любом случае я бы посоветовал не обслуживать файл из самого процесса rails. Если это возможно / приемлемо для вашего варианта использования, я бы использовал аутентифицированный GET для обслуживания частных данных из корзины.

Используя аутентифицированный GET, вы можете сохранить сегмент и его объекты частными, разрешив временное разрешение на чтение содержимого определенного объекта путем создания URL-адреса, включающего токен подписи аутентификации.

5
ответ дан 1 December 2019 в 04:53
поделиться

Волшебная поисковая фраза, которую вы ищете, может выглядеть так: « pretty print ».

3
ответ дан 1 December 2019 в 04:53
поделиться

Как и у другого респондента, ключевой идеей для правильного выполнения этой задачи является печать, то есть создание текста из структуры абстрактного синтаксиса кода.

В основном вы пользуетесь вложением дерева для создания вложенности печатного текста. Ключевыми идеями являются построение примитивных строк из листьев дерева, склеивание горизонтальных блоков [прямоугольников текста] вместе с другими блоками поддеревьев для обеспечения горизонтальной композиции и склейка блоков друг на друга для получения более крупных вертикальных блоков.

Сложные части: регенерация языковых литералов с форматированием информации из листьев дерева (сколько ведущих нулей было у этого двоичного числа с плавающей запятой?), обработка переполнения правого поля путем разрешения альтернативных макетов боксов и отслеживания с возвратом, а также сопоставление сложных древовидных структур с образцом, чтобы красиво печатать определенные деревья (например, вложенные если-то-если-то-если ....)

Вот исследовательский документ по теме (Полный текст PDF) .

Вот , что мы сделали для prettyprinting с помощью DMS Software Reengineering Toolkit для prettyprint AST, генерируемые крупномасштабным метапрограммированием.

2
ответ дан 1 December 2019 в 04:53
поделиться