Date post: | 22-Dec-2015 |
Category: |
Documents |
View: | 217 times |
Download: | 0 times |
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
Sample Syntax# delcare filenamefilename 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 (2)# 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;};
Output
Output
Output
Output
Output
Output
Output
Output
Output
Output
Structure of eMDL
• Filename Specification• Function Declarations• Variable Declarations• Main Body
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.
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.
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.
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.
Function Declarations (3)
• Example :function move50 {
repeat <3> { move sphere1 <0, 50, 0>; move box2 <0, -50, 0>;
save; }
}
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.
Variable Types
• Integerset <name> as integer <value>
• Boxset <name> as box <x, y, z, dx, dy, dz>
• Lineset <name> as line <x, y, z, x2, y2, z2>
• Sphereset <name> as sphere <x, y, z, r>
• Torusset <name> as torus <x, y, z, r, R>
Main Body
• This is where the actual graphic manipulations occur
• Any variable declared previously can be changed and moved
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
Details of our Compiler
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)
How We Implemented Our Compiler
emdlLexer
• Lexer splits emdl code into tokens.• Some common tokens are:
– INT– ID, which can be variable names and
function names.
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.
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.
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.
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.
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.
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.
Testing
• Tested during and after development.
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.
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.
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.