Расположение с отступом для генерации кода

Вы можете использовать not exists:

INSERT INTO SecondTable(Col1,Col2)
    SELECT Col5,Col6
    FROM FirstTable ft
    WHERE ft.RecType = 'ABC' AND
          NOT EXISTS (SELECT 1 FROM SecondTable t2 WHERE t2.col1 = ft.col5 AND t2.col2 = ft.colt6);
5
задан xian 4 October 2009 в 13:30
поделиться

8 ответов

В более общем случае я написал код XSLT, который генерирует код интерфейса БД C++. Хотя сначала я пытался произвести правильно форматируемый код от XSLT, это быстро стало ненадежным. Мое решение состояло в том, чтобы полностью проигнорировать форматирование в выводе XSLT и затем выполнить получающуюся очень длинную строку кода через отступ GNU. Это произвело обоснованно отформатированный исходный файл C++, подходящий для отладки.

Я могу предположить, что проблема становится намного более колючей при контакте с объединенным источником, таким как HTML и PHP.

4
ответ дан 18 December 2019 в 13:20
поделиться

Генерируйте AST, затем пересекают его inorder и испускают исходный код, который правильно отформатирован.

3
ответ дан 18 December 2019 в 13:20
поделиться

Я нашел, что игнорирование делающий отступ во время поколения является лучшим. Я написал универсальный 'код, форматирующий' механизм, которые отправляют, обработал весь произведенный код. Таким образом, я могу определить делающие отступ правила, и синтаксис кода управляет отдельно от генератора. Существуют ясные преимущества для этого разделения.

2
ответ дан 18 December 2019 в 13:20
поделиться

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

например, в Python, генерируя больше Python.

def generateWhileLoop(condition, block, indentPrefix = ""):
    print indentPrefix + "while " + condition + ":"
    generateBlock(block, indentPrefix + "    ")

С другой стороны, в зависимости от моего настроения:

def generateWhileLoop(condition, block, indentLevel = 0):
    print " " * (indentLevel * spacesPerIndent) + "while " + condition + ":"
    generateBlock(block, indentLevel + 1)

Отметьте предположение это condition короткая часть текста, который соответствует на той же строке, в то время как block находится на отдельной строке с отступом. Если этот код не может быть уверен в том, должны ли подэлементы быть расположены с отступом, этот метод начинает падать.

Кроме того, эта техника не почти как полезная для разбрызгивания относительно небольших количеств PHP в HTML.

[Редактирование для разъяснения: Я записал вопрос и также этот ответ. Я хотел отобрать ответы с одной техникой, которую я действительно использую, и иногда полезно, но эта техника приводит меня к сбою для типичного кодирования PHP, таким образом, я ищу другие идеи как он.]

3
ответ дан 18 December 2019 в 13:20
поделиться

Делая веб-сайты в PHP, я нахожу смешивание HTML и функционально-специализированный PHP проблематичный, это ограничивает обзор и делает отладку тяжелее. Решение постараться не смешиваться в этом случае использует шаблон управляемое содержание, посмотрите Присяжного острослова, например. Кроме лучше intendation, шаблонная обработка содержания полезна для других вещей как, например, быстрее исправляя. Если клиент требует изменения в расположении, которым конкретная проблема расположения может быть быстро найдена и устранена, не беспокоясь функциональным кодом PHP, генерирующим данные (и наоборот).

1
ответ дан 18 December 2019 в 13:20
поделиться

Я соглашаюсь с ответом oddthinking.

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

1
ответ дан 18 December 2019 в 13:20
поделиться

Конкретно на поколении HTML - почему это имеет значение?

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

Так или иначе установите Firebugпанель инструментов разработчика IE для тестирования IE впоследствии) и они оба шоу Вы HTML во вложенном формате, И можно просто нажать на элемент страницы для прямого просмотра разметки - ПУТЬ, более эффективный, чем рассмотрение необработанного исходного вывода HTML.

0
ответ дан 18 December 2019 в 13:20
поделиться

Я ситуация PHP/HTML я пытаюсь сохранить каждый фрагмент кода последовательно располагаемым с отступом в его исходном коде. Это сохраняет код читаемым, где он действительно имеет значение и обычно имеет побочный эффект создания вывода HTML, который читаем. Как другие сказали, поджигатель заботится об остальных.

0
ответ дан 18 December 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: