Download presentation
Presentation is loading. Please wait.
1
Programming Languages and Translators Fall 2007 Eli Hamburger (eh2315@columbia.edu) Michele Merler (mm3233@columbia.edu) Jimmy Wei (jw2553@columbia.edu) Lin Yang (ly2179@columbia.edu) TMIL Text ManIpulation Language
2
Generate CAPTCHAs (image based RTT) Manipulate text on multiple images to create animations Create easily adaptable templates (for web site designers) Simple, easy to use, c++ like programming language that allows iterative operations text and images Motivation
3
TMIL Features Manipulate color, size, rotation, font of a text Write text on an image Draw lines on an image Open and save images Build text or lines animations on sequences of images
4
Lexical Conventions Basic types (C/C++ like): bool, char, float, int, string Built-in types: –color (r,g,b) –coordinate (x,y) –image (h,w) –text (name, font, colour, position, size, rotation) Built-in functions: –open (image, name) –create (image,h,w,bgcolor) –save (image,name) –drawline (image, pos1, pos2, color, width) –int2string, float2string, string2float, string2int, char_at Operators: () [] + - * / % ++ -- == != > = <= && || !., Special operator: <~ image <~ text : stamps text on image
5
TMIL Program Sample int main(){ image im; open(im,"Dock.jpg"); // loads image from file text t; t.name = "dog"; t.font = "Arial.ttf"; t.size = 60; coordinate coor[3]; /* array definition */ color c; c.r = c.g = c.b = 50; t.colour = c; for (int i=0; i<=2; i++) { coor[i].x = i*150; coor[i].y = 200; t.rotation = i*40; t.position = coor[i]; if(i==1) t.font = "Times.ttf"; im <~ t; } drawline(im, coor[0], coor[2], c, 5); save(im, "test5.png"); // save image into a file return 0; }
6
// int main() { image im; open(im,"Dock.jpg"); loads image from file text t; t.name = "dog"; t.font = "Arial.ttf"; t.size = 60; coordinate coor[3]; array definition color c; c.r = c.r = c.b = 50; t.colour = c; for (int i=0; i<=2; i++) { coor[i].x = i*150; coor[i].y = 200; t.rotation = i*40; t.position = coor [ i ] ; if (i==1) t.font = "Times.ttf"; im <~ t; } drawline (im, coor[0], coor[2], c, 5); save (im, "test5.png"); // save image into a file return 0; } TMIL Program Sample C/C++ comments style multiple assignments control flow statements Stamp operatorBuilt-in functions Built-in type property access main() function required /**/ Array access
7
Another TMIL Sample void circular_draw(image im, text w) { text w1 = w; string name; for(int j = 0; j<15; j++) { name = "./turtle/turtle" + int2string(j+1) + ".jpg"; w1.colour.b -= 30; w1.colour.g -= 10; w1.rotation = - j*(360/15); im <~ w1; save(im,name); } int main() { image im; open(im, "turtle.jpg"); text w1; w1.name = "turtle"; w1.font = "GOTHIC.ttf"; w1.rotation = 0; w1.size = 80; w1.position.x = im.w/2; w1.position.y = im.h/2; w1.colour.r = w1.colour.g = w1.colour.b = 255; circular_draw(im,w1); return 0; } User defined function
8
TMIL Compiler Architecture Input: TMIL code Tree Walker Syntax Analysis Semantic Analysis Semantic Errors LEXER/PARSER Output: executable G++ GDFreeType AST C++ Code tmil.h Code Generation
9
Testing Lexer Tests Parser Tests Walker/Semantic Analysis Tests Final Programs (more complex and actually do something)
10
Lessons Learned & Conclusions Start early Good communication Pros of teamwork Modifying grammar There will always be more corner cases to test Writing your own compiler is fun
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.