Language Boxes
          Bending the Host Language
       with Modular Language Changes

Lukas Renggli, Marcus Denker, Oscar Nierstrasz
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
§
§
    §

            Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
§
§
    §

            Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Host Environment
Tool Infrastructure




Host Environment
Syntax

Language 1
              Editor



             Compiler
Language 2

             Debugger
Syntax

Language 1
              Editor



             Compiler
Language 2

             Debugger
Syntax

Language 1
              Editor



             Compiler
Language 2

             Debugger
Syntax

Language 1
              Editor



             Compiler
Language 2

             Debugger
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Tool Infrastructure




Host Environment
Language Boxes




Tool Infrastructure




Host Environment
Language Box
   Model
Language
               *
                    Change


Language       *   Language
  Box               Concern
           *

               *   Language
                    Scope
IV + VII = XI
Language
               *
                    Change


Language       *   Language
  Box               Concern
           *

               *   Language
                    Scope
Language Change




       Insert FRAGMENT
  (before|after) PRODUCTION
as (choice|sequence|replacement)
Language Change




Insert RomanNumber
before NumberLiteral
    as a choice.
Language Change


Literal:                 BooleanLiteral

                            NilLiteral

                          NumberLiteral

                          StringLiteral

                           ArrayLiteral



NumberLiteral:            IntegerLiteral

                           FloatLiteral
Language Change




RomanNumber:       'I' .. 'M'
Language Change


Literal:             BooleanLiteral

                        NilLiteral

                     NumberLiteral'

                      StringLiteral

                       ArrayLiteral



NumberLiteral':      RomanNumber

                      NumberLiteral
Language Change




1st   Class Grammar
      Scannerless, Packrat
Language Concern




Production Action
Language Concern




       Compiler
aToken value romanToArabic lift
Language Concern




Highlighting
aToken -> Color gray
Language Concern




Custom Actions
Language Scope




Active?
Language Scope




System
Language Scope




Packages
Language Scope




Classes
Language Scope




Methods
Language
               *
                    Change


Language       *   Language
  Box               Concern
           *

               *   Language
                    Scope
Conflicts
Language   Language   Language   Language
  Box 1      Box 2      Box 3      Box 4
Language   Language   Language   Language
  Box 1      Box 2      Box 3      Box 4
Language   Language   Language   Language
  Box 1      Box 2      Box 3      Box 4
Language     Language   Language   Language
  Box 1        Box 2      Box 3      Box 4




ostGrammar
Language    Language     Language   Language
  Box 1       Box 2        Box 3      Box 4




           HostGrammar
Language   Language   Language    Language
  Box 1      Box 2      Box 3       Box 4




                                 HostGramm
Language   Language   Language   Language
  Box 1      Box 2      Box 3      Box 4
HostGrammar'
con  sis t
mi  gh t         rts
       us e d pa
o f un

               HostGrammar'
con  sis t            m igh t b
mi  gh t         rts          am big u    e
       us e d pa                       o us
o f un

               HostGrammar'
PackratParser




HostGrammar'
SELECT * FROM users
<SQL: SELECT * FROM users>
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
scg.unibe.ch/research/helvetia

Language Boxes — Bending the Host Language with Modular Language Changes