EASY Meta-programming with Rascal

  • Paul Klint
  • Tijs van der Storm
  • Jurgen Vinju
Part of the Lecture Notes in Computer Science book series (LNCS, volume 6491)


Rascal is a new language for meta-programming and is intended to solve problems in the domain of source code analysis and transformation. In this article we give a high-level overview of the language and illustrate its use by many examples. Rascal is a work in progress both regarding implementation and documentation. More information is available at


source code analysis source code transformation metaprogramming domain-specific languages 


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. [ASU86]
    Aho, A.V., Sethi, R., Ullman, J.D.: Compilers: Principles, Techniques and Tools. Addison-Wesley, Reading (1986)zbMATHGoogle Scholar
  2. [AZ05]
    Anderson, P., Zarins, M.: The CodeSurfer software understanding platform. In: Proceedings of the 13th International Workshop on Program Comprehension (IWPC 2005), pp. 147–148. IEEE, Los Alamitos (2005)CrossRefGoogle Scholar
  3. [BBC+10]
    Bessey, A., Block, K., Chelf, B., Chou, A., Fulton, B., Hallem, S., Henri- Gros, C., Kamsky, A., McPeak, S., Engler, D.: A few billion lines of code later: using static analysis to find bugs in the real world. ACM Commun. 53(2), 66–75 (2010)CrossRefGoogle Scholar
  4. [BKK+98]
    Borovansky, P., Kirchner, C., Kirchner, H., Moreau, P.-E., Ringeissen, C.: An overview of ELAN. In: Kirchner, C., Kirchner, H. (eds.) Proceedings of the 2nd International Workshop on Rewriting Logic and its Applications (WRLA 1998). Electronic Notes in Theoretical Computer Science, vol. 15, pp. 55–70 (1998)Google Scholar
  5. [BBK+07]
    Balland, E., Brauner, P., Kopetz, R., Moreau, P.-E., Reilles, A.: Tom: Piggybacking rewriting on Java. In: Baader, F. (ed.) RTA 2007. LNCS, vol. 4533, pp. 36–47. Springer, Heidelberg (2007)CrossRefGoogle Scholar
  6. [BPM04]
    Baxter, I., Pidgeon, P., Mehlich, M.: DMS: Program transformations for practical scalable software evolution. In: Proceedings of the International Conference on Software Engineering (ICSE 2004), pp. 625–634. IEEE, Los Alamitos (2004)Google Scholar
  7. [BDH+01]
    van den Brand, M.G.J., van Deursen, A., Heering, J., de Jong, H.A., de Jonge, M., Kuipers, T., Klint, P., Moonen, L., Olivier, P.A., Scheerder, J., Vinju, J.J., Visser, E., Visser, J.: The ASF+SDF Meta-environment: A Component-Based Language Development Environment. In: Wilhelm, R. (ed.) CC 2001. LNCS, vol. 2027, pp. 365–370. Springer, Heidelberg (2001)CrossRefGoogle Scholar
  8. [Bey06]
    Beyer, D.: Relational programming with crocopat. In: Proceedings of the 28th International Conference on Software Engineering, ICSE 2006, pp. 807–810. ACM, New York (2006)Google Scholar
  9. [BNL05]
    Beyer, D., Noack, A., Lewerentz, C.: Efficient relational calculation for software analysis. IEEE Trans. Software Engineering 31(2), 137–149 (2005)CrossRefGoogle Scholar
  10. [BKV03]
    van den Brand, M.G.J., Klint, P., Vinju, J.J.: Term rewriting with traversal functions. ACM Transactions on Software Engineering Methodology 12(2), 152–190 (2003)CrossRefzbMATHGoogle Scholar
  11. [BKVV08]
    Bravenboer, M., Kalleberg, K.T., Vermaas, R., Visser, E.: Stratego/ XT 0.17. A language and toolset for program transformation. Science of Computer Programming 72(1-2), 52–70 (2008)MathSciNetCrossRefGoogle Scholar
  12. [DN04]
    Dams, D., Namjoshi, K.S.: Orion: High-precision methods for static error analysis of C and C++ programs. Technical report. Bell Labs, Bell Labs Technical Memorandum ITD-04-45263Z (2004)Google Scholar
  13. [Cor06]
    Cordy, J.R.: The TXL source transformation language. Science of Computer Programming 61(3), 190–210 (2006)MathSciNetCrossRefzbMATHGoogle Scholar
  14. [FKO98]
    Feijs, L.M.G., Krikhaar, R., Ommering, R.C.: A relational approach to support software architecture analysis. Software Practice and Experience 28(4), 371–400 (1998)CrossRefGoogle Scholar
  15. [Hol08]
    Holt, R.C.: Grokking software architecture. In: Proceedings of the 15th Working Conference on Reverse Engineering (WCRE 2008), pp. 5–14. IEEE, Los Alamitos (2008)CrossRefGoogle Scholar
  16. [HM03]
    Hedin, G., Magnusson, E.: The JastAdd system - an aspect-oriented compiler construction system. Science of Computer Programming, 37–58 (2003)Google Scholar
  17. [Joh79]
    Johnson, S.C.: Lint, a program checker. In: McIlroy, M.D., Kernighan, B.W. (eds.) Unix Programmer’s Manual, 7th edn., vol. 2B. AT&T Bell Laboratories, Murray Hill (1979)Google Scholar
  18. [JPJ+90]
    Jourdan, M., Parigot, D., Julié, C., Durin, O., Le Bellec, C.: Design, implementation and evaluation of the FNC-2 attribute grammar system. In: Proceedings of the ACM SIGPLAN 1990 Conference on Programming Language Design and Implementation, PLDI 1990, pp. 209–222. ACM, New York (1990)CrossRefGoogle Scholar
  19. [JR94]
    Jackson, D.J., Rollins, E.J.: A new model of program dependences for reverse engineering. In: Proceedings of the 2nd ACM SIGSOFT Symposium on Foundations of Software Engineering. ACM SIGSOFT Software Engineering Notes, vol. 19, pp. 2–10 (1994)Google Scholar
  20. [KHR07]
    Kniesel, G., Hannemann, J., Rho, T.: A comparison of logic-based infrastructures for concern detection and extraction. In: Proceedings of the 3rd Workshop on Linking Aspect Technology and Evolution, LATE 2007, p. 6. ACM, New York (2007)Google Scholar
  21. [Kli93]
    Klint, P.: A meta-environment for generating programming environments. ACM Transactions on Software Engineering and Methodology 2(2), 176–201 (1993)CrossRefGoogle Scholar
  22. [Kli03]
    Klint, P.: How understanding and restructuring differ from compiling—a rewriting perspective. In: Proceedings of the 11th International Workshop on Program Comprehension (IWPC 2003), pp. 2–12. IEEE Computer Society, Los Alamitos (2003)Google Scholar
  23. [Kli08]
    Klint, P.: Using Rscript for software analysis. In: Working Session on Query Technologies and Applications for Program Comprehension, QTAPC 2008 (2008)Google Scholar
  24. [KvdSV09]
    Klint, P., van der Storm, T., Vinju, J.J.: RASCAL: A domain specific language for source code analysis and manipulation. In: IEEE International Workshop on Source Code Analysis and Manipulation (SCAM 2009), pp. 168–177. IEEE Computer Society, Los Alamitos (2009)Google Scholar
  25. [KvdSV10]
    Klint, P., van der Storm, T., Vinju, J.: DSL tools: Less maintenance? In: Preliminary Proceedings of the Tenth Workshop on Language Descriptions Tools and Applications LDTA 2010, March 27-28 (2010)Google Scholar
  26. [Kri99]
    Krikhaar, R.L.: Software Architecture Reconstruction. PhD thesis. University of Amsterdam (1999)Google Scholar
  27. [LR01]
    Lämmel, R., Riedewald, G.: Prological Language Processing. In: Proceedings of the First Workshop on Language Descriptions, Tools and Applications (LDTA 2001), Genova, Italy, April 7 (2001); van den Brand, M., Parigot, D.: Satellite event of ETAPS 2001. ENTCS, vol. 44. Elsevier Science, Amsterdam (April 2001)Google Scholar
  28. [McC76]
    McCabe, T.J.: A complexity measure. IEEE Transactions on Software Engineering SE-12(3), 308–320 (1976)MathSciNetCrossRefzbMATHGoogle Scholar
  29. [dMSV+08]
    de Moor, O., Sereni, D., Verbaere, M., Hajiyev, E., Avgustinov, P., Ekman, T., Ongkingco, N., Tibble, J.: QL: Object-oriented queries made easy. In: Lämmel, R., Visser, J., Saraiva, J. (eds.) GTTSE 2007. LNCS, vol. 5235, pp. 78–133. Springer, Heidelberg (2008)CrossRefGoogle Scholar
  30. [MK88]
    Müller, H., Klashinsky, K.: Rigi – a system for programming-in-the-large. In: Proceedings of the 10th International Conference on Software Engineering (ICSE 10), pp. 80–86 (April 1988)Google Scholar
  31. [Par07]
    Parr, T.: The Definitive ANTLR Reference: Building Domain-Specific Languages. Pragmatic Bookshelf (2007)Google Scholar
  32. [SRK07]
    Speicher, D., Rho, T., Kniesel, G.: Jtransformer - eine logikbasierte infrastruktur zur codeanalyse. In: Workshop Software-Reengineering, WSR 2007, May 02-04 (2007)Google Scholar
  33. [Tip95]
    Tip, F.: A survey of program slicing techniques. Journal of Programming Languages 3(3), 121–189 (1995)Google Scholar
  34. [Wei84]
    Weiser, M.: Program slicing. IEEE Transactions on Software Engineering SE-10(4), 352–357 (1984)CrossRefzbMATHGoogle Scholar
  35. [VWBGK10]
    Van Wyk, E., Bodin, D., Gao, J., Krishnan, L.: Silver: An extensible attribute grammar system. Sci. Comput. Program. 75(1-2), 39–54 (2010)MathSciNetCrossRefzbMATHGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2011

Authors and Affiliations

  • Paul Klint
    • 1
    • 2
  • Tijs van der Storm
    • 1
    • 2
  • Jurgen Vinju
    • 1
    • 2
  1. 1.Centrum Wiskunde & InformaticaNetherlands
  2. 2.Universiteit van AmsterdamNetherlands

Personalised recommendations