1 / 40

eMDL

eMDL. Extended Motion Description Language. EMDL vs. MDL. MDL classic. Syntax: line x1, y1, z1, x2, y2, z2 Box x, y, z, dx, dy, dz sphere x, y, z, r move x, y, z [knob]. EMDL. Simple Object Oriented Robust Supports Animation. # delcare filename filename sample_syntax;

jin
Download Presentation

eMDL

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. eMDL Extended Motion Description Language

  2. EMDL vs. MDL

  3. MDL classic • Syntax: • line x1, y1, z1, x2, y2, z2 • Box x, y, z, dx, dy, dz • sphere x, y, z, r • move x, y, z [knob]

  4. EMDL • Simple • Object Oriented • Robust • Supports Animation

  5. # delcare filename filename sample_syntax; # fucntion definiitions function ears { sphere2=sphere1; sphere3=sphere1; sphere2.r=sphere1.r/2; sphere3.r=sphere1.r/2; save; } function moveout { move sphere3 <0,50,0>; sphere2.y=sphere2.y-50; save; } #more function definitions function moveback { sphere3.y=sphere3.y-50; sphere2.y=sphere2.y+50; save; } function movesideways { sphere3.x=sphere3.x-50; sphere2.x=sphere2.x+50; save; } function moveup { sphere3.y=sphere3.y-50; sphere2.y=sphere2.y-50; save; } Sample Syntax

  6. # main body set sphere1 as sphere <150,150,150,50>; set sphere2 as sphere <100,100,100,100>; set sphere3 as sphere <100,100,100,100>; hide sphere2; hide sphere3; save; funct ears; repeat <2>{funct moveout;}; repeat <2>{funct moveback;}; repeat <2>{funct movesideways;}; repeat <2>{funct moveup;}; Sample Syntax (2)

  7. Output

  8. Output

  9. Output

  10. Output

  11. Output

  12. Output

  13. Output

  14. Output

  15. Output

  16. Output

  17. Structure of eMDL • Filename Specification • Function Declarations • Variable Declarations • Main Body

  18. Filename Specification • Allows users to chose the filename for all MDL files that will be output • Must be the first line of the eMDL script • Optional : if not included, then the program will default to outputting tmp.mdl files.

  19. Filename Specification (2) • Example : filename mdlTest; • Will result in all outputted MDL files named mdlTest<number>.mdl • <number> is enumerated based on how many times the save function was called in the code.

  20. Function Declarations • If you want to create any functions, they must be declared and defined in the second section. • eMDL supports macro style functions with no parameters • Every function must have a unique identifier.

  21. Function Declarations (2) • Function declarations consist of the keyword “function” followed by the identifying name • The function body is enclosed in curly braces and can contain of any combination of pre or user defined functions, assignments, or repeat clauses.

  22. Function Declarations (3) • Example : function move50 { repeat <3> { move sphere1 <0, 50, 0>; move box2 <0, -50, 0>; save; } }

  23. Variable Declarations • Must occur between the function declarations and the main body • All variables have a global scope. • Each variable must have its own unique identifier. • Five types of variables.

  24. Variable Types • Integer set <name> as integer <value> • Box set <name> as box <x, y, z, dx, dy, dz> • Line set <name> as line <x, y, z, x2, y2, z2> • Sphere set <name> as sphere <x, y, z, r> • Torus set <name> as torus <x, y, z, r, R>

  25. Main Body • This is where the actual graphic manipulations occur • Any variable declared previously can be changed and moved

  26. Main Body (2) • Users may: • Utilize assignment statements • Call predefined functions • Call user defined functions • Create repeat blocks • Remove a variable • Save the current state to an MDL file

  27. Details of our Compiler

  28. Details of our Compiler • Lexer – splits code into tokens. • Parser – creates an AST. • TreeWalker – generates mdl Code • mdlParser – mdl Parser generates gif images. (compiled in C)

  29. How We Implemented Our Compiler

  30. emdlLexer • Lexer splits emdl code into tokens. • Some common tokens are: • INT • ID, which can be variable names and function names.

  31. emdlParser • Parser makes an Abstract Syntax Tree out of the stream of tokens that the Lexer outputs. • Syntax is checked here. • The AST is designed and created here in the most efficient way for static semantic analysis to take place.

  32. emdlTreeWalker • TreeWalker performs the static semantic analysis, as well as the code generation. • A linked list is created to hold all global variables. • The object in linked list knows what type of object the variable is, and all of its parameters.

  33. emdlTreeWalker • A copy of the AST is made before we walk through the function declarations. • This is to facilitate function calls. • Each function call creates a copy of the this tree and call a treeWalker function on this tree. • Since our functions act like macros, the function body is just a sequential continuation of our code.

  34. mdlParser • mdlParser is a binary executable that is compiled in C. • It asks the user for the names of an mdl file, and the name of the image file to be created. • It then outputs an image file for the given mdl file.

  35. Comparison between emdl and mdl • One of the main reasons for the creation of this language was to extend mdl so that we could make the coding tighter and cleaner. • For the demo you had seen earlier, one emdl file created 9 separate mdl files, which created 9 separate image files.

  36. Comparison between eMDL and mdl • Now if we had wanted to run the same animation, but with the two outside spheres being farther away from the interior sphere, I would only need to change on line in emdl. • But to do the same change in mdl would require us to modify all 9 of the mdl files that created this animation.

  37. Testing • Tested during and after development.

  38. During Development • Ran two test files when each new functionality was implemented. • One that ought to work • One that ought not and give errors • Didn’t always include all possible formations of newly implemented statements.

  39. After Development • Created suite of test cases • Tested all legal formations of statements. • Tested for what we predicted to be common syntactic and semantic mistakes.

  40. Lessons Learned • Compilers are harder to make than you might think. • Perpetual debugging and error-checking, since errors can and did crop up in the simplest functions.

More Related