язык для семантического анализа? - PullRequest
3 голосов
/ 13 сентября 2009

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 13 сентября 2009

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

2 голосов
/ 14 сентября 2009

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

Очень немногие из них в настоящее время приводят к системам, пригодным для реальных языков программирования. Один из других ответов здесь предлагает Кентавр как систему, которая пытается это сделать. Семантика действия Питера Моссеса - одна из самых серьезных недавних попыток.

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

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

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

Одна система, которая следует более специальному подходу выше, является нашей DMS Software Reengineering Toolkit , который также имеет общие семантические определения (синтаксис, таблицы символов, анализ потока данных) завершено для реального такие языки, как Java, C, C ++ и COBOL. DMS может подать заявку преобразование источника в источник AST обусловлено с помощью различных процедур сбора фактов, что позволяет надежное преобразование кода.

1 голос
/ 13 сентября 2009

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

0 голосов
/ 13 сентября 2009

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

http://www -sop.inria.fr / croap / кентавр / centaur.html

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

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

...