Есть много схем для определения семантики языков программирования: денотационной семантики (который отображает синтаксис в функцию, которые вычисляют состояние программы); семантики (что составляет строительные переводчик для Вашего языка), трансформационной семантика (что составляет перевод вашего languauge других языка, для которого некоторых другой семантика уже существует) и т.д.
Очень немногие из них в настоящее время приводят к системы, используемые для реальных языков программирования. Один из других ответов здесь предлагает Кентавру как систему, которая пытается это сделать. Action semantics автор Peter Mosses - одна из самых серьезных недавних попыток.
Для реальных систем в настоящее время наиболее эффективны более специальные методы. Они включают системы, в которых эффективный лексический и грамматический синтаксис могут быть определены (как варианты LEX и YACC), и автоматически строить деревья. Атрибутивные грамматики позволяют специфицировать вычисления по деревьям, , которые позволяют определять некоторые виды анализов, такие как таблица символов конструкция или метрики (технически вы могли бы сделать денотационную семантику таким образом). Большинство традиционных языков (C, Java, C#, COBOL, ...) имеют относительно сходные структуры в отношении потока управления и поток данных , и, как следствие, можно построить общие процедуры анализа потока , чтобы можно было рассуждать о таком стандарте языки.
Наконец, вам нужна цель для вашего семантического анализа: какие факты именно вы хотите извлечь? Доступные статические аналитические системы имеют смешанные шаблонные/процедурные методы кода для , собирающие данные о синтаксисе, таблице символов и потоке, представляющие интерес, для вычисления конкретных ответов на конкретные вопросы.
Некоторые системы позволяют использовать эту семантическую информацию для переноса изменений исходного кода.
Одна системы, которая следует за более особый подход выше является нашим DMS Software Reengineering Toolkit, который также имеет общие семантические ОПРЕДЕЛЕНИЯ (синтаксис, таблицы символов, anlaysis потока данных) завершен для реальных языков, таких как Java, C, C++ и COBOL. DMS может применять преобразования источника в источник в условные АСТ с помощью различных процедур сбора фактов, что позволяет достоверно преобразовывать код .
Я бы сказал «анализ потока данных» здесь. Статический анализ является более широким и охватывает множество других вещей, таких как проверка типов. –
@Paul: PAG представляет собой абстрактную структуру интерпретации и, конечно, (из http://www.di.ens.fr/~cousot/researchthemes.shtml). Спецификация типа и вывод - это статическое приближение динамического набора текста и как такое можно понять как абстрактную интерпретацию семантики программы ». Но я застенчивый, ты прав. –