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

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

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

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

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


person nmd_07    schedule 06.07.2018    source источник
comment
Вам нужно знать его синтаксис. :) Это, наверное, формально описано в одном из нормативных документов. Если вам повезет, ваш работодатель предоставит вам подходящий вариант, иначе вам придется просить, одалживать или покупать его в ISO.   -  person rici    schedule 06.07.2018
comment
@rici Во второй ссылке, которой я поделился, упоминается, что EXPRESS определяется как производная от Wirth Syntax Notation (WSN).   -  person nmd_07    schedule 07.07.2018
comment
Да, и документы на ЭКСПРЕСС написаны на английском языке. Этого достаточно, чтобы начать, правда? :) Во второй ссылке, которой вы поделились, также упоминается, что формальная спецификация находится в стандарте ISO 10303-11: 2014, который вы можете купить в ISO за 198 швейцарских франков (это может быть дешевле, если вы обратитесь в свой национальный орган по стандартизации. А может, и нет).   -  person rici    schedule 07.07.2018
comment
Предполагая, что вы хотите проанализировать файлы IFC STEP (которые определены с использованием синтаксиса EXPRESS), почему бы вам не взглянуть на некоторые наборы инструментов и библиотеки, которые уже обрабатывают синтаксический анализ и обработку файлов данных. Например. Вот три для начала: docs.xbim.net ifcopenshell.org или github.com/hypar- io / IFC-gen   -  person Andy Ward    schedule 11.07.2018
comment
Отказ от ответственности: я участвую в XBim, но по моим наблюдениям, обмен строительной информацией - это гораздо больше, чем анализ файлов EXPRESS. Я хотел бы получить толчок к созданию чего-то, что создали и проверили другие организации, а не начинать с нуля ...   -  person Andy Ward    schedule 11.07.2018


Ответы (3)


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

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

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

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

person Loebl    schedule 10.07.2018

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

person hlg    schedule 27.11.2020

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

person Vertexwahn    schedule 11.07.2018
comment
Парсер iopExpress имеет некоторые недостатки. Он не функционирует полностью. - person nmd_07; 23.09.2018
comment
Когда синтаксическому анализатору предоставляется либо IFC2x3_TC1.exp, либо IFC4.exp, он выдает ошибку. Однако более поздние версии, похоже, работают нормально, хотя я не совсем уверен, насколько правильным является представление в классах Schema и Entity. - person nmd_07; 23.09.2018