Компилятор активно сокращает ошибки компиляции в коде? - PullRequest
0 голосов
/ 24 ноября 2011

Я сидел в начале урока информатики на этой неделе и думал о чем-то:

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

Это делается пассивно с предложениями (например, красное подчеркивание при неизвестном синтаксисе, автозаполнение при вводе кода) в некоторых средах программирования, но есть ли примеры того, как компилятор делает это активно (то есть напрямую переписывает код)?

Размышления об этом заставляют меня думать о чем-то еще:

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

В качестве крайнего примера можно было бы проанализировать не содержащий синтаксиса фрагмент кода, такой как «нарисовать прямоугольник», а затем с помощью ввода от программиста (получить обратную связь от программиста по таким вопросам, как «рисовать где?», «Прямоугольник какого размера?»). ", или" 2d или 3d space? ") программа может быть написана (предпочтение точности над общностью). Или могут быть значения по умолчанию низкого уровня, которые используются для создания кода, когда обнаруживаются ключевые слова («рисовать», «прямоугольник») (преимущество универсальности над точностью).

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Это было сделано в 1973 году. Несколько исследователей Корнелльского университета CS разработали компилятор для языка PL / I под названием PL / C .Он был задуман как система обучения и компилировал каждую программу в нечто, что было синтаксически правильным и могло быть скомпилировано и выполнено.Он будет постоянно перезаписывать или удалять недействительные операторы, пока они не будут правильно скомпилированы.Более поздняя, ​​более похожая на IDE версия их работы описана в техническом отчете 1977 .

0 голосов
/ 24 ноября 2011

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

...