Abstract
Traditional compiler development is non-modular. Although syntax extension and DSL embedding is making its way back in modern language design and implementation, componentisation in compiler construction is still an overlooked matter. Neverlang is a language development framework that emphasises modularity and code reuse. Neverlang makes extension, restriction and feature sharing easier, by letting developers define language components in distinct, independent units, that can be compiled independently and shared across different language implementations, even in their compiled form. The semantics of the implemented languages can be specified using any JVM-supported language. In this paper we will present the architecture and implementation of Neverlang 2, by the help of an example inspired by mobile devices and context-dependent behaviour. The Neverlang framework is already being employed successfully in real-world environments.
This work has been partially supported by MIUR project CINA: Compositionality, Interaction, Negotiation, Autonomicity for the future ICT society.
Chapter PDF
Similar content being viewed by others
References
Aho, A.V., Sethi, R., Ullman, J.D.: Compilers: Principles, Techniques, and Tools. Addison-Wesley, Reading (1986)
Aycock, J.: The Design and Implementation of SPARK, a Toolkit for Implementing Domain-Specific Languages. J. of Computing and Inform. Tech. 10(1), 55–66 (2004)
Bettini, L.: Implementing Java-like Languages in xText with xSemantics. In: Proc. of SAC’13, Coimbra, Portugal, March 2013, pp. 1559–1564. ACM Press, New York (2013)
Bosch, J.: Delegating Compiler Objects. In: Gyimóthy, T. (ed.) CC 1996. LNCS, vol. 1060, pp. 326–340. Springer, Heidelberg (1996)
Brabrand, C., Schwartzbach, M.I.: The Metafront System: Safe and Extensible Parsing and Transformation. J. Science of Computer Programming 68, 2–20 (2007)
Bravenboer, M., Kalleberg, K.T., Vermaas, R., Visser, E.: Stratego/XT 0.17. A Language and Toolset for Program Transformation. J. Science of Comp. Progr. 72(1-2), 52–70 (2008)
Bravenboer, M., Visser, E.: Parse Table Composition. In: Gašević, D., Lämmel, R., Van Wyk, E. (eds.) SLE 2008. LNCS, vol. 5452, pp. 74–94. Springer, Heidelberg (2009)
Cazzola, W.: Domain-Specific Languages in Few Steps. In: Gschwind, T., De Paoli, F., Gruhn, V., Book, M. (eds.) SC 2012. LNCS, vol. 7306, pp. 162–177. Springer, Heidelberg (2012)
Cazzola, W., Poletti, D.: DSL Evolution through Composition. In: Proc. of RAM-SE’10, Maribor, Slovenia, June 2010, ACM Press, New York (2010)
Cazzola, W., Vacchi, E.: DEXTER and Neverlang: A Union Towards Dynamicity. In: Proc. of ICOOOLPS’12, Beijing, China, June 2012, ACM Press, New York (2012)
Dinkelaker, T., Eichberg, M., Mezini, M.: An Architecture for Composing Embedded Domain-Specific Languages. In: Proc. of AOSD’10, Saint-Malò, France, pp. 49–60 (2010)
Earley, J.: An Efficient Context-Free Parsing Algorithm. Commun. ACM 13(2), 94–102 (1970)
Efftinge, S., Eysholdt, M., Köhnlein, J., Zarnekow, S., von Massow, R., Hasselbring, W., Hanus, M.: xBase: Implementing Domain-Specific Languages for Java. In: Proc. of GPCE’12, Dresden, Germany, Sep. 2012, pp. 112–121. ACM Press, New York (2012)
Efftinge, S., Völter, M.: oAW xText: A Framework for Textual DSLs. In: Proc. of the EclipseCon Summit Europe 2006 (ESE’06), vol. 32, Esslingen, Germany (Nov. 2006)
Erdweg, S., Rendel, T., Kästner, C., Ostermann, K.: SugarJ: Library-Based Syntactic Language extensibility. In: Proc. of OOPSLA’11, Portland, OR, USA, Oct. 2011, pp. 391–406 (2011)
Gini, R.: Frameworks for Data Extraction and Management from Electronic Healthcare Databases for Multi-Center Epidemiologic Studies: a Comparison among EU-ADR, MATRICE, and OMOP Strategies. Keynote (Nov. 2012)
Grimm, R.: Practical Packrat Parsing. TR2004-854, NYU, New York, NY, USA (2004)
Hedin, G., Magnusson, E.: JastAdd — An Aspect-Oriented Compiler Construction System. Science of Computer Programming 47(1), 37–58 (2003)
Heering, J., Klint, P., Rekers, J.: Incremental Generation of Parsers. IEEE Trans. Softw. Eng. 16(12), 1344–1351 (1990)
Horspool, R.: Incremental Generation of LR Parsers. J. Comp. Lang. 15(4), 205–223 (1990)
Knöll, R., Mezini, M.: \(\mathrm\pi\): A Pattern Language. In: OOPSLA’09, pp. 503–522 (2009)
Krahn, H., Rumpe, B., Völkel, S.: MontiCore: A Framework for Compositional Development of Domain Specific Languages. J. SW Tools for Techn. Transfer 12(5), 353–372 (2010)
Mernik, M., Žumer, V.: Incremental Programming Language Development. Computer Languages, Systems and Structures 31(1), 1–16 (2005)
Ng, K., Warren, M., Golde, P., Hejlberg, A.: The Roslyn Project: Exposing the C# and VB Compiler’s Code Analysis. White paper, Microsoft (Oct. 2011)
Odersky, M.: Reflection and Compilers. Keynote at Lang.NEXT (Apr 2012)
Parr, T.J., Quong, R.W.: ANTLR: A Predicated-LL(k) Parser Generator. Software—Practice and Experience 25(7), 789–810 (1995)
Stansifer, P., Wand, M.: Parsing Reflective Grammars. In: Proc. of LDTA’11, Saarbrucken, Germany, March 2011, pp. 10:1–10:7. ACM Press, New York (2011)
Steinberg, D., Budinsky, D., Paternostro, M., Merks, E.: EMF: Eclipse Modeling Framework, Dec. 2008. Addison-Wesley, Reading (2008)
Völter, M., Pech, V.: Language Modularity with the MPS Language Workbench. In: Proc. of ICSE’12, Zürich, Switzerland, June 2012, pp. 1449–1450. IEEE Computer Society Press, Los Alamitos (2012)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2013 IFIP International Federation for Information Processing
About this paper
Cite this paper
Cazzola, W., Vacchi, E. (2013). Neverlang 2 – Componentised Language Development for the JVM. In: Binder, W., Bodden, E., Löwe, W. (eds) Software Composition. SC 2013. Lecture Notes in Computer Science, vol 8088. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-39614-4_2
Download citation
DOI: https://doi.org/10.1007/978-3-642-39614-4_2
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-39613-7
Online ISBN: 978-3-642-39614-4
eBook Packages: Computer ScienceComputer Science (R0)