Сложность обнаружения ошибок IDE и автозаполнения зависит от синтаксиса языка?

Требуется ли меньше проверок/менее тщательный анализ кода для обеспечения обратной связи об ошибках среды разработки и автоматического завершения для языков программирования, которые состоят в основном из удобочитаемых фраз и слов (например, Python, VB.NET)? Это отличается от языков C-стиля, которые больше зависят от символов и пунктуации для структуры кода.


person A. Wilson    schedule 22.05.2012    source источник
comment
Перед определением более простого, которого вы избегали, дайте определение подробному и краткому.   -  person jason    schedule 22.05.2012
comment
@Close Voters: этот вопрос не о том, лучше ли VB, чем C#.   -  person GSerg    schedule 22.05.2012
comment
Я предполагаю, что дело не в многословии; скорее, речь идет о том, что в C# разрешено больше вещей, и, следовательно, синтаксический анализатор имеет больше способов интерпретировать строку кода.   -  person GSerg    schedule 22.05.2012
comment
Разрешено больше вещей? В наши дни единственная реальная разница между ними заключается в синтаксисе.   -  person cHao    schedule 22.05.2012
comment
@GSerg прав ... Я не основываюсь на C #, на самом деле я предпочитаю его. Я обновлю свои определения по запросу Джейсона.   -  person A. Wilson    schedule 22.05.2012
comment
Самая сложная часть синтаксического анализа языка — это не синтаксический анализ, а восстановление после синтаксической ошибки и дальнейшее создание значимых ошибок. Особенно трудно исправить ошибки с блочными конструкциями. Произнесите отсутствующую конечную скобку для тела метода. Так что да, языки, которые более подробно говорят о синтаксисе блоков, помогают компиляторам выдавать более точные ошибки.   -  person Hans Passant    schedule 22.05.2012
comment
@HansPassant спасибо за отзыв, это имеет смысл.   -  person A. Wilson    schedule 22.05.2012
comment
Я внес последнюю правку, чтобы получить исчерпывающий и бесспорный ответ на этот вопрос. Если это достаточно конкретно, чтобы открыть его сейчас, я был бы очень признателен.   -  person A. Wilson    schedule 22.05.2012


Ответы (1)


У меня есть опыт/я отвечаю за создание десятков языковых интерфейсов.

Словесные языки и пунктуационные языки, как правило, одинаково сложны для синтаксического анализа и статического анализа.

Люди, которые определяют языки любого типа, либо украшали их десятилетиями (например, COBOL с 1958 года), либо создавали сложные языки (C++, Scala, Ruby) со сложным синтаксисом и сложными правилами разрешения имен и вывода типов; затем поставщики компилятора продолжают добавлять неясный синтаксис для поддержки странных вещей, которые они делают, или для обеспечения блокировки клиента (например, MS «управляемый C++», объявления DLL и т. д.). Есть и третья проблема паршивых определений; лучшие языки могут иметь четкие правила о том, как они работают, но многие языки имеют небрежные определения (например, PHP), что создает темные углы, которые должны быть сглажены болезненными экспериментами с фактической реализацией.

C++ был нашим худшим, особенно. с комитетом С++ 11, который недавно устроил массовый беспорядок. У нас есть полные синтаксические анализаторы C++, но мы все еще работаем над разрешением полных имен для C++11 поверх нашей реализации C++98. (Код разрешения имени составляет около 250 000 строк кода, и этого недостаточно!).

IBM COBOL занимает второе место; язык просто гигантский, и есть всякие забавные правила разрешения имен («неквалифицированное имя может ссылаться на конкретное имя без уточнения, если ссылка однозначна». Итак, является ли это имя однозначной ссылкой в ​​данном контексте?).

После того, как вы преодолеете синтаксический анализ и разрешение имени/типа, вы попадете в поток управления, поток данных, анализ точек, анализ диапазона, построение графа вызовов... которые, как правило, требуют такого же объема усилий, как и более ранние этапы; нам сойдет с рук меньше, если у нас будут действительно хорошие библиотеки, поддерживающие эти задачи.

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

Другой автор отметил, что восстановление после синтаксических ошибок и (выделено) «продолжать генерировать содержательные сообщения об ошибках». Все, что я могу сказать на это, это «Аминь, брат». См. этот ответ SO https://stackoverflow.com/a/6657974/120163 для обсуждения того, что идет не так, когда вы иметь «частичные программы», что, по сути, является тем, что вы получаете, когда исправляете синтаксическую ошибку, догадываясь об исправлении.

person Ira Baxter    schedule 22.05.2012
comment
Это ответ, который я искал. Все, что я могу сказать, это спасибо за то, что вы делаете, это звучит действительно пугающе. - person A. Wilson; 22.05.2012
comment
Хороший комплимент, спасибо. Бывают дни, когда я сожалею об этом выборе профессии :-} - person Ira Baxter; 23.05.2012