-
Notifications
You must be signed in to change notification settings - Fork 0
/
doc.tex
225 lines (168 loc) · 8.75 KB
/
doc.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
\documentclass[10pt, conference, compsocconf]{IEEEtran}
% correct bad hyphenation here
\hyphenation{op-tical net-works semi-conduc-tor}
\usepackage[pdftex]{graphicx}
\usepackage{amssymb}
\usepackage{soul}
\usepackage[pdftex]{graphicx}
\usepackage[utf8]{inputenc}
\usepackage{wrapfig}
\usepackage{color}
\usepackage[T1]{fontenc}
\begin{document}
%
% paper title
% can use linebreaks \\ within to get better formatting as desired
\title{Informal Research Demonstration: \\ Language Modularity with the MPS
Language Workbench}
% author names and affiliations
% use a multiple column layout for up to two different
% affiliations
\author{\IEEEauthorblockN{Markus Voelter}
\IEEEauthorblockA{independent/itemis\\
voelter@itemis.de}
\and
\IEEEauthorblockN{Vaclav Pech}
\IEEEauthorblockA{JetBrains\\
vaclav.pech@jetbrains.com}
}
\newcommand{\changefont}[3]{\fontfamily{#1}\fontseries{#2}\fontshape{#3}\selectfont}
\newcommand\todo[1]{\mynote{TODO}{#1}}
\newcommand{\fig}[1]{Fig.~\ref{#1}}
\newcommand{\sect}[1]{Section~\ref{#1}}
\newcommand{\ic}[1]{\changefont{cmtt}{m}{n}{#1}\normalfont} % inline code
\newcommand{\lcr}[1]{\changefont{cmtt}{m}{n}{#1}\normalfont} % language
\newcommand{\pp}[1]{ \vspace{2mm}\noindent\textbf{{#1}} }
% make the title area
\maketitle
\begin{abstract}
JetBrains MPS is a comprehensive environment for language engineering.
New languages can be defined as standalone languages or as modular extensions of
existing languages. Since MPS is a projectional editor, syntactic forms other
than text are possible, including tables or mathematical symbols. This
demo will show MPS based on mbeddr C, a novel approach for embedded software
development that makes use of incremental language extension on the basis of C.
\end{abstract}
\begin{IEEEkeywords}
language engineering, language extension, language composition
\end{IEEEkeywords}
\section{Introduction and Motivation}
\noindent
Finding and working with the right abstractions for describing a
problem or its solution is one of the central pillars of software engineering.Once the right abstractions have been found, programs can be expressed more
concisely, are easier to understand, the description can be analysed and other
artifacts can be synthesized. A language is the purest form of abstraction,
adding a suitable concrete syntax to work with the abstractions effectively. An
IDE that supports syntax coloring, code completion, error annotation and
refactoring makes working with the language and its abstractions even more
productive.
Many software systems are composed from several concerns, each of them expressed
with its own set of abstraction, possibly by different people, some of them may
not even be programmers. To describe a real-world system well, several
languages are necessary.
Looking at software engineering in this light, an environment is needed in
which language creation is easy, languages can be composed and the concrete
syntax is very flexible to encompass the needs of all the stakeholders involved
in the software system. The JetBrains MPS open source language workbench is such
as system.
\section{About MPS}
\noindent JetBrains MPS (\ic{http://jetbrains.com/mps}) is an open source
language workbench, developed by JetBrains and licensed under Apache 2.0. MPS is
a projectional editor. This means that a wide variety of syntactic forms are
supported including textual, symbolic (e.g. mathematical), tabular and, in the
upcoming version 3.0, graphical (see the decision table in \fig{screenshot}).
IDE support is provided for all notations. Even for textual notations, no
grammar or parser is used. So a combination of independently developed languages
cannot become ambiguous as a consequence of the intricacies of grammar classes.
This results in very good support for language modularity, reuse and composition
in MPS. While projectional (aka structural) editors have had a bad reputation
traditionally, MPS has managed to make the editing experience very much like
traditional text editing.
\section{About mbeddr C}
\noindent mbeddr C is an extensible version of the C
programming language implemented in MPS. It is open source under the Eclipse
Public License and can be found at \ic{http://mbeddr.com}. Development teams can
build their own domain-specific extensions of C to increase productivity and
reliability in embedded software development. mbeddr C comes with a couple of
reusable extensions such as interfaces, components, unit test support and state
machines. It also integrates model checking and SAT solving to support formal
verification of software systems. By extending programming languages with
suitable abstractions, verification becomes significantly simpler.
\begin{figure}[h]
\includegraphics[width=8.6cm]{figures/screenshot.png}
\caption{An example of a program written with mbeddr C in MPS. It mixed C
functions, state machines and decision tables, each of them defined as a separate
language. The screenshot also shows requirements traces (green annotations),
which can be attached to any program element without the definition of this
element being aware of the annotation.}
\label{screenshot}
\end{figure}
\section{Contents of the Tool Demo}
\pp{Introduction} We will introduce the need for language engineering in
the same way as in the introduction above.
\pp{Example Use Case} We will then show an example from the mbeddr
extensible C language. The project develops modular extensions of
C to make embedded software development more productive. The project
demonstrates an intriguing use case fo language extension and showcases
syntactic forms other than text, such as the decision table shown in.
\pp{Creating Extensions} The main part of the demo will consist of a demo of howto build a language extension. Depending on the time we have in the tool demo,we will build the Hello World of language extensions, the \ic{unless} statement.It is basically a negated \ic{if}. This extension involves the following steps:
\begin{itemize}
\item Defining a new language that extends C so we can "plug into" C's
statements
\item Defining a new concept \ic{UnlessStatement} that extends C's
\ic{Statement} and has an \ic{Expression} and a \ic{StatementList} as children
\item Creating an editor that projects the \ic{UnlessStatement} in the same
way as the \ic{if}, with the keyword \ic{unless} instead
\item Defining a type system equation that ensures the expression in the
\ic{UnlessStatement} is Boolean
\item Implementing a generator that maps the \ic{unless} back to an \ic{if}
with a negated condition, so it can be compiled with a regular C compiler
\item And finally, a quick fix that allows the in place transformation of
existing \ic{if} statements to an \ic{unless} (if they don't have \ic{else
if} or \ic{else} clauses).
\end{itemize}
This language extension shows most of the essential ingredients to language
definition in MPS.
\section{What the audience will take away}
The audience will understand the benefits of language extension. They will
realize that, with the right tools, the efforts for defining extensions is
limited, and can be done as part of real-world software development projects.
\section{Further Reading}
More details about the mbeddr approach and the capabilities of MPS can be found
in the technical report at \ic{http://bit.ly/wIYERh}.
% For peer review papers, you can put extra information on the cover
% page as needed:
% \ifCLASSOPTIONpeerreview
% \begin{center} \bfseries EDICS Category: 3-BBND \end{center}
% \fi
%
% For peerreview papers, this IEEEtran command inserts a page break and
% creates the second title. It will be ignored for other modes.
\IEEEpeerreviewmaketitle
% conference papers do not normally have an appendix
% trigger a \newpage just before the given reference
% number - used to balance the columns on the last page
% adjust value as needed - may need to be readjusted if
% the document is modified later
%\IEEEtriggeratref{8}
% The "triggered" command can be changed if desired:
%\IEEEtriggercmd{\enlargethispage{-5in}}
% references section
% can use a bibliography generated by BibTeX as a .bbl file
% BibTeX documentation can be easily obtained at:
% http://www.ctan.org/tex-archive/biblio/bibtex/contrib/doc/
% The IEEEtran BibTeX style support page is at:
% http://www.michaelshell.org/tex/ieeetran/bibtex/
%\bibliographystyle{IEEEtran}
% argument is your BibTeX string definitions and bibliography database(s)
%\bibliography{IEEEabrv,../bib/paper}
%
% <OR> manually copy in the resultant .bbl file
% set second argument of \begin to the number of references
% (used to reserve space for the reference number labels box)
% that's all folks
\end{document}