Формирование описания грамматики языка...

Post on 10-Aug-2015

47 views 9 download

Transcript of Формирование описания грамматики языка...

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

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

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

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

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

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

и другие

Modelica Association - MODELICA

Реализации

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

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

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

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

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

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

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

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

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

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

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

Пример

Rivp vnu

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

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

Описание на Modelica

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

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

Rivp vnu

Civp vnu

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

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

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

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

Ёмкость

Rivp vnu

Civp vnu

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

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

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

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

Ёмкость

Rivp vnu

Civp vnu

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

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

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

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

Ёмкость

Rivp vnu

Civp vnu

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

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

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

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

Ёмкость

Rivp vnu

Civp vnu

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

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

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

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

Ёмкость

Rivp vnu

Civp vnu

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

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

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

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

Ёмкость

Rivp vnu

Civp vnu

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

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

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

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

Ёмкость

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

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

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

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

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

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

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

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

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

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

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

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

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

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

… и тд.

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

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

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

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

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

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

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

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

Sublime Text 2/3

Atom.io

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

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

• Оф. сайт 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

Источники: