21
Формирование описания регулярной грамматики языка программирования MODELICA и его внедрение в системы лексического анализа редакторов исходного кода

Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Embed Size (px)

Citation preview

Page 1: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Формирование описания регулярной грамматики языка программирования MODELICA

и его внедрение в системы лексического анализа редакторов исходного кода

Page 2: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

OSMC OpenModelica (Швеция) Dassault Systems Dymola (Швеция)

Modelon Jmodelica (Германия) ITI SimulationX (Германия)

Imagine SA AMESim (Франция) Maplesoft MapleSim (Канада)

CyDesign Labs CyModelica (США) Wolfram SystemModeler (США)

и другие

Modelica Association - MODELICA

Реализации

Page 3: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Особенности MODELICA

Мультидоменное моделирование– позволяет описывать модели электрических,механических, гидравлических и др. систем

Гибридные системы– имеет средства для описания системы с непрерывной и дискретной частями

Компонентно-ориентированное моделирование– базовой абстракцией языка является класс, позволяет создавать модели и компоненты применяя наследование, определять собственные типы данных расширяя базовые и пр.

Декларативность– использует подход не причинно-следственного моделирования

Page 4: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Причинно-следственное моделирование

Причинно-следственная модель САУ в Simulink

Причинно-следственное моделирование физических процессов

Page 5: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Не причинно-следственное моделирование

Моделирование физических процессов в Modelica (Dymola)

Page 6: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Структура описания модели

Пример

Rivp vnu

Сопротивление

Page 7: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Инкрементный датчик положения ротора

Описание на Modelica

Математическое описание

Временная диаграмма

Page 8: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Rivp vnu

Civp vnu

Компонентно-ориентированное программирование

Без наследования:

Простейшие двухполюсники

Сопротивление

Ёмкость

Page 9: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Rivp vnu

Civp vnu

Компонентно-ориентированное программирование

Без наследования: C наследованием:

Простейшие двухполюсники

Сопротивление

Ёмкость

Page 10: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Rivp vnu

Civp vnu

Компонентно-ориентированное программирование

Без наследования: C наследованием:

Простейшие двухполюсники

Сопротивление

Ёмкость

Page 11: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Rivp vnu

Civp vnu

Компонентно-ориентированное программирование

Без наследования: C наследованием:

Простейшие двухполюсники

Сопротивление

Ёмкость

Page 12: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Rivp vnu

Civp vnu

Компонентно-ориентированное программирование

Без наследования: C наследованием:

Простейшие двухполюсники

Сопротивление

Ёмкость

Page 13: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Rivp vnu

Civp vnu

Компонентно-ориентированное программирование

Без наследования: C наследованием:

Простейшие двухполюсники

Сопротивление

Ёмкость

Page 14: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Rivp vnu

Civp vnu

Компонентно-ориентированное программирование

Без наследования: C наследованием:

Простейшие двухполюсники

Сопротивление

Ёмкость

Page 15: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Описание грамматики ЯП

Применения описания языка программирования:1. Анализ кода с целью идентификации языка программирования;2. Подсветка синтаксиса в редакторах исходного кода;3. Автоматическое дополнения языковых конструкций при вводе кода;4. Анализ исходного кода на наличие синтаксических ошибок и др.

Регулярная грамматика языка (в виде регулярных выражений) применяется как шаблон для текстового поиска, разбивки и подстановки, в

том числе в лексическом анализе.

Регулярные выражения — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов.

Page 16: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Описание языка программирования выполняетразбивку кода на группы:

Описание грамматики ЯП

• Комментарии (comments) • сточные (line) • блочные (block)

• Литералы (constant) • числовые (numeric) • символьные (character)

• экранизирующие последовательности (escape) • литералы уникальные для ЯП (laguage) • …

• Ключевые слова (keywords) • Управляющие конструкции (control) • Операторы (operator)

• Числовые (numeric) • Логические (logic)

• Другие (other) • Нелегальные последовательности (invalid)

• Запрещённые (illegal) • Устаревшие (deprecated)

… и тд.

Выбор группы для подстроки выполняетсяна основе спецификации языка

Page 17: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

- name: keyword.operator.logical match: \b(and|or|not)\b

Пример правила: логические операторы

Page 18: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

- name: comment.line match: (\/\/).*$\n

Пример правила: строчный комментарий

Page 19: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

- match: \b((model|class|record|block|package)\s+\w+\s*(".*")*) captures: '1': {name: entity.name.type} '2': {name: keyword} '3': {name: comment.line}

Пример правила: определение класса

Page 20: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

Внедрение работы

Sublime Text 2/3

Atom.io

Расширения для редакторов:

Внедрение в Ruby библиотеку linguist:

Page 21: Формирование описания грамматики языка программирования Modelica и его внедрение в системы лексического

• Оф. сайт Modelica: https://modelica.org/• Книга «Modelica By Example» http://book.xogeny.com/• Репозиторий описания на GitHub https://github.com/BorisChumichev/

modelicaSublimeTextPackage• Sublime Text http://www.sublimetext.com/• Atom Editor https://atom.io/• GitHub Linguist https://github.com/github/linguist

Источники: