1 / 43

Creating an Interpreter and Compiler for a music language ML

AtoCC Compiler Construction Workshop. Creating an Interpreter and Compiler for a music language ML. Aalborg, 26.03.08. Michael Hielscher. Content. Introduction Why we created AtoCC What is AtoCC The music language ML Create an interpreter for ML Create a ML SVG compiler.

alina
Télécharger la présentation

Creating an Interpreter and Compiler for a music language ML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AtoCC Compiler Construction Workshop Creating an Interpreter and Compiler for a music language ML Aalborg, 26.03.08 Michael Hielscher

  2. Content • Introduction • Why we created AtoCC • What is AtoCC • The music language ML • Create an interpreter for ML • Create a MLSVG compiler

  3. Why we created AtoCC ? We want to motivate students to deal with theoretical computer science.  We use Compiler Construction as an interesting topic (practical use) right from the beginning. We define a target project we want to solve (Compiler). Target language is not machine code !!! Cycles between teaching theory and using it in a practical way (project based). The practical part is no add-on at the end of theory class! Students solve complex tasks in the area of theoretical computer science with very high abstraction.

  4. Why we created AtoCC ? • We needed a software package solving this task without dealing with too much technical stuff. • We needed software for teaching purposes not for professional use.

  5. Abstraction and problem solving model develop Software use Software Computer Science based layer Modelbased layer Problembased layer

  6. What is AtoCC ? • The learning environment AtoCCcan be of use in teaching abstract automata, formal languages, and some of its applications in compiler construction. • From a teacher's perspective AtoCCaims to address a broad range of different learning activities forcing the students to actively interact with the subjects being taught. • AtoCCcontains 6 programs: AutoEdit, AutoEdit Workbook, kfG-Edit, TDiag, VCC, SchemeEdit www.atocc.de

  7. Software we need today Please install the following software: • Java JDK • Mozilla FireFox as SVG viewer • AtoCC (www.atocc.de) • Workshop ZIP file:AtoCC Website  A. Education  Aalborg  Materials

  8. The music language ML • Like for mobile phones we can find several easy to read tone/music languages • We want to create an own primitive note language for monophonic songs (only one voice) • Example:C1-2 G1-8 A0-4 A0-8G0-4 G0-8 C0-8 P-2

  9. The music language ML • This language is so primitive, that it is even a regular language. • A more complex language could include loops:[C1-2 G1-8 [A0-4 A0-8]] P-2(typical bracket example for push down automata)

  10. The music language ML • Play with ML: • Open folder „Songs“ and execute Console.bat Task: Change song file content and get familiar with ML

  11. Creating an Interpreter • Create an Interpreter for ML • Define a T-Diagram • Define a grammar for ML • Define Scanner and Parser definition • Create S attributes • Generate the ML Interpreter compiler • Test the Interpreter with the help of the T-Diagram Worksheet 1

  12. T-Diagrams • We use T-Diagrams to model our compiler processes. • Our diagrams look slightly different: • We have 4 element types. • Compiler, Program, Interpreter und E/A for Input/Output Input/Output Compiler Program Interpreter

  13. Create a T-Diagram • Note down a T-Diagram for applying our ML Interpreter written in JavaBytecode on a program written in ML.

  14. Create a T-Diagram

  15. Define a grammar for ML • One part of our T-Diagram, the Interpreter, we want to create now. • Therefore we need to define how ML looks like (Syntax). We use a context free grammar GML (in BNF). • Look at examples and try to figure out a grammar: • G0-4 G1-2 A0-1 • D1-32 P-16 A-8 P-2 • C0-16 C1-8 F0-1 H1-2 P-1 Start with: Song  NotesNotes  ?

  16. Define a grammar for ML

  17. Define a grammar for ML

  18. Define a grammar for ML

  19. Create an Interpreter for ML • Basically we can say that an interpreter is similar to a compiler, but without generating some target language. • Therefore we will generate a compiler used as an interpreter, which does not output some target language.

  20. How does a compiler work For an Interpreter we don’t care for output code,  we want to execute something directly

  21. Creating an Interpreter from GML • We need to declare a scanner and a parser (a description how they shall work). • We start with a scanner definition. • We define Token classes with patterns (RegExp.) • Easiest solution: for each terminal of GML we use exactly one pattern (one Token class). • More complex pattern result into a much less work for the parser  we shall try to give the scanner a job to do 

  22. Creating an Interpreter from GML all keynames Tokenclasslist allowed octaves 1 duration values (full, half, ¼, …) 1

  23. Creating an Interpreter from GML • We need to make sure, that none token overlaps the pattern of another. • But in program languages this is quite often the case:Keyword: beginIdentifier: [a-z]+ • To solve this, the ordering of token classes in list is important!

  24. Creating an Interpreter from GML • We can rewrite our grammar to make use of our tokens as new terminals: • We will have 6 token classes with pattern for:KeyName, Token0, Token1, Token2_32, P and -

  25. Creating an Interpreter from GML • We can represent such pattern also as primitive Finite Automata: Token2_32 2|4|8|16|32 KeyName C|D|E|F|G|H|A

  26. Creating an Interpreter from GML

  27. Creating an Interpreter from GML We rename the generated token classes to useful names

  28. Creating an Interpreter from GML We need to specify the regular expressions we defined earlier

  29. Creating an Interpreter from GML

  30. Creating an Interpreter from GML • We can generate an empty compiler (scanner + parser) now and apply it on a program in ML: • We want to generate sound  something is still missing 

  31. Creating an Interpreter from GML • We need to define S attributes for each parser rule. • These attributes are small code fragments that are executed when this rule is applied. • Each rule returns a result $$ by executing the code fragment (we need to fill $$). • Example:Note  Key – Duration$$ = “Note: “ + $1 + “ Length: “+ $3;

  32. Creating an Interpreter from GML The placeholders $1 to $n: • In S attributes we can use placeholders for the results of each rule right side element. Input word: C1-8 C1-4 Input word: C1-8 D1-4 • From a token $n is always the input content (lexem)! • From a nonterminal $n is always the result $$ from this element! $1 $2 $2 C1 - 8 $$ = "C1-8";

  33. Creating an Interpreter from GML The placeholders $1 to $n: • In S attributes we can use placeholders for the results of each rule right side element. Input word: C1-8 C1-4 Input word: C1-8D1-4 • From a token $n is always the input content (lexem)! • From a nonterminal $n is always the result $$ from this element! $1 C1 $1 $2 C 1 • All $n and $$ havethedata type String !!! $$ = "C1";

  34. Creating an Interpreter from GML • Now we can deal with: What will happen when a note rule is applied (playing a note or a pause) • On we can find 3 helper functions for playing MIDI notes. • We need to translate key names like C0 into according MIDI keys to be played. Worksheet 1

  35. Creating an Interpreter from GML

  36. Creating an Interpreter from GML • Generatethe final interpreteragain

  37. Execute the T-Diagram

  38. Creating a compiler • Create a ML  SVG compiler • Define a T-Diagram • Define Scanner and Parser definition • Create S attributes • Generate MLSVG compiler • Test the compiler with the help of the T-Diagram Worksheet 2

  39. Create a T-Diagram

  40. Creating a compiler

  41. Execute the T-Diagram • We can attach our new compiler to the T-Diagram and execute it:

  42. Summary <?xml version="1.0" ?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-... [KeyName, "C"] [Token1, "1"] [Minus, "-"] … • C1-8 E1-4 D0-2 …

  43. Thanks for your attention Any Questions ? www.atocc.de

More Related