Пользовательский парсер для языка моделирования данных EXPRESS

Мне нужно написать собственный синтаксический анализатор для EXPRESS - который упоминается как язык моделирования данных, который используется для определения и передачи информации о конструкции программного обеспечения САПР. Вот пара ресурсов:

https://en.wikipedia.org/wiki/EXPRESS_(data_modeling_language) https://www.loc.gov/preservation/digital/formats/fdd/fdd000449.shtml

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

Что мне конкретно нужно знать об этом "языке моделирования данных" и его синтаксисе, чтобы я мог придумать разумный парсер?

2 ответа

Решение

В github есть описание языка EXPRESS на языке Backus-Naur-Form. Есть инструменты, которые берут описание в BNF и генерируют из него парсер (например, bison или boost:: spirit).

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

Возможно, вы захотите взглянуть на существующие реализации, например, stepcode. У них есть синтаксический анализатор EXPRESS, который берет схему EXPRESS и генерирует синтаксический анализатор STEP, который может загружать файлы, описанные схемой EXPRESS.

Вы должны знать, что EXPRESS и STEP являются очень мощными и обширными инструментами, поэтому вам следует подумать об использовании / изменении существующих реализаций, а не обкатывать свои собственные.

Здесь вы можете найти парсер для C++, реализованный с использованием Flex и Bison: oipExpress

Существует синтаксический анализатор на основе XText в EXPRESS2EMF проекте. Однако он еще не завершен. В настоящее время он все еще пропускает ограничения (также известные как правила) и некоторые языковые конструкции EXPRESS, которые не используются в спецификациях IFC.

Другие вопросы по тегам