3

background: - существуют формальные языки для выражения языкового словаря действующего языка программирования и синтаксиса - такие представления (например, регулярное выражение и контекстно-свободные грамматики) могут быть автоматически скомпилированы в анализаторы лексикона/синтаксиса для некоторого языка программирования с использованием некоторых инструментов (например, LEX и YACC)язык для семантического анализа?

вопросы: - существуют ли такие формальные языки для определения семантики языка программирования? - существуют ли компиляторы для автоматизации генерации кода семантического анализатора на основе этих формальных языков? - любые ресурсы для чтения семантического анализа исходного кода?

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

я надеюсь, что я сделал себе ясно много заранее спасибо

ответ

2

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

Очень немногие из них в настоящее время приводят к системы, используемые для реальных языков программирования. Один из других ответов здесь предлагает Кентавру как систему, которая пытается это сделать. Action semantics автор Peter Mosses - одна из самых серьезных недавних попыток.

Для реальных систем в настоящее время наиболее эффективны более специальные методы. Они включают системы, в которых эффективный лексический и грамматический синтаксис могут быть определены (как варианты LEX и YACC), и автоматически строить деревья. Атрибутивные грамматики позволяют специфицировать вычисления по деревьям, , которые позволяют определять некоторые виды анализов, такие как таблица символов конструкция или метрики (технически вы могли бы сделать денотационную семантику таким образом). Большинство традиционных языков (C, Java, C#, COBOL, ...) имеют относительно сходные структуры в отношении потока управления и поток данных , и, как следствие, можно построить общие процедуры анализа потока , чтобы можно было рассуждать о таком стандарте языки.

Наконец, вам нужна цель для вашего семантического анализа: какие факты именно вы хотите извлечь? Доступные статические аналитические системы имеют смешанные шаблонные/процедурные методы кода для , собирающие данные о синтаксисе, таблице символов и потоке, представляющие интерес, для вычисления конкретных ответов на конкретные вопросы.

Некоторые системы позволяют использовать эту семантическую информацию для переноса изменений исходного кода.

Одна системы, которая следует за более особый подход выше является нашим DMS Software Reengineering Toolkit, который также имеет общие семантические ОПРЕДЕЛЕНИЯ (синтаксис, таблицы символов, anlaysis потока данных) завершен для реальных языков, таких как Java, C, C++ и COBOL. DMS может применять преобразования источника в источник в условные АСТ с помощью различных процедур сбора фактов, что позволяет достоверно преобразовывать код .

3

Существует много формальных языков программирования семантики семантики - посмотрите на wikipedia entry еще несколько терминов для Google. Я сделал небольшое количество Z в моей ранней карьере (эта ссылка на формальные методы wiki - еще одно возможное место для начала изучения). Я предлагаю задать вопрос на форуме lambda the ultimate, поскольку люди там используют некоторые из них, и могут предложить, что использовать для любого случая использования, которое вы имеете в виду; this paper кажется несколько связанным с тем, что вы просили с точки зрения генерации компиляторов - для создания компилятора вам нужны как семантика языка, так и описание целевой машины.

0

То, что вы описали именно то, что проект Centaur был о:

http://www-sop.inria.fr/croap/centaur/centaur.html

На самом деле, вы могли бы очень далеко в описании семантики вашего языка, до момента, когда система была в состоянии дать вы - переводчик для этого языка (тогда вы полностью описали семантику). Но тебе не пришлось пройти весь путь. Вы могли бы сделать меньше описательной работы и все равно получить структурированный редактор и typechecker для своих усилий.

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

1

Специально для статического анализа, смотрите на http://rw4.cs.uni-sb.de/~martin/pag/

+0

Я бы сказал «анализ потока данных» здесь. Статический анализ является более широким и охватывает множество других вещей, таких как проверка типов. –

+0

@Paul: PAG представляет собой абстрактную структуру интерпретации и, конечно, (из http://www.di.ens.fr/~cousot/researchthemes.shtml). Спецификация типа и вывод - это статическое приближение динамического набора текста и как такое можно понять как абстрактную интерпретацию семантики программы ». Но я застенчивый, ты прав. –

Смежные вопросы