2016-03-23 3 views
1

Хотелось бы высказать некоторые соображения по поводу концепций: Domain Object и Semantic Model.Семантическая модель из грамматики

Итак, я действительно хочу понять, что такое Domain Object/Semantic Model, а что нет Domain Object/Semantic Model для.

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

Однако я не совсем понимаю, как это сделать. Например, учитывая эту небольшую грамматику, как вы строите Domain Object или Semantic Model.

Это именно то, что я пытаюсь выяснить ...

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

Пример (SQL Синтаксис Tree):

Вместо генерировать непосредственно в SQL предложение, создать семантическую модель, а затем я могу connent интерпретатор, который перевести эту семантическую модель к SQL предложения.

Abstract Systex Tree -> Semantic Model -> Interpreter 

К таким образом, я мог бы Transact-SQL переводчик и другой ОНР для SQLite.

+0

Я этого не понимаю ... Что вы хотите сделать? Что вы подразумеваете под Object Object/Semantic Model? Я не думаю, что видел эти термины в книге ANTLR4 ... – cantSleepNow

+0

Я подробно описал сообщение. – Jordi

ответ

1

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

Обычные термины, связанные с разбором, являются «конкретным деревом синтаксиса» (соответствует форме правил грамматики), «абстрактное синтаксическое дерево» (попытка создания дерева, содержащего менее случайные детали, although it might not be worth the trouble.).

Parsing is only a small part of the problem of processing a language. Вам нужно много семантической интерпретации синтаксиса, однако вы представляете его (AST, CST, ...). Это включает в себя такие понятия, как:

  • разрешение имен (для каждого идентификатора, где это определено б
  • разрешение Типа (для каждого идентификатор/выражение/синтаксис конструкции, каков тип этого объекта
  • ?
  • проверка типа (в том, что синтаксис конструкция используется в правильном пути?) анализ
  • управления потоком (в каком порядке перечислены части программы выполняются в, возможно, даже параллельный/динамический/ограничение определенного)
  • анализ потока данных (где определены значения?)
  • Оптимизация (замена одного набора синтаксических конструкций другим семантически эквивалентным набором с некоторым хорошим свойством [выполняется быстрее после компиляции является обычным явлением)), при высоких или низких уровнях абстракции
  • Генерация кода высокого уровня, например, наборы интерпретации синтаксические конструкции на языке, к эквивалентным наборам на целевом языке [часто на ассемблере]

Каждая из этих концепций более или менее строится поверх предыдущих.

Ближе всего я могу прийти к «семантической модели» - это генерация кода высокого уровня. Это требует много техники, которую вы должны построить на вершине деревьев.

ANTLR анализирует. Вы должны делать/поставлять остальное.

+0

Большое спасибо за ваш ответ. Насколько я могу понять, все, что вы выписали, можно было бы указать в то же время, когда вы проходите через АСТ. Тем не менее, как только вы пройдете AST, было бы целесообразно составить представление о том, что каждое предложение есть. Это модель, которая определяет/описывает семантику. Вы согласны? Очевидно, что с DSL-файлами (например, простым языком запросов домена) это очень просто: – Jordi

+0

«все, что вы написали ... можно было бы указать одновременно с тем, как вы проходите через AST». Если вы верите в это, вы можете сделать то же самое, что и вы, проходя через персонажей, потому что АСТ вытекает из этого, и это явно бессмыслица. ... –

+0

Пункт какой-то «модели» должен иметь явное представление о том, что важно. Если вы хотите захватить полную семантику, вам необходимо: 1) интерпретировать текст/AST/и т. Д. для извлечения модели в виде набора таблиц символов/типов, потоковых графов или 2) вам нужно перевести программу на другой язык (язык более низкого уровня) и вызвать переведенный результат (полную) семантическую модель. В последнем случае вы рассчитываете на предположительно более простую семантику целевого языка, чтобы сделать семантику исходного языка более понятной. DSL не делают это проще. –