Mr. Proper Nabil Shahid William Blinn Jeff Lin Matthew Anderegg Who is Mr. Proper… … and why did we name our language after him? Step 1. Do hours of work on O.S. assignment. Step 2. Google for hints on how to compile. Step 3. Make mrproper Step 4. Cry. What is MrProper? A multi format log file manipulation language. • Easy to use • Powerful • Multi chat client support • Log file manipulation Mrp: Easy to Use Hides complexity. Logs become primary data type. Log manipulation akin to integer manipulation. Mrp: Powerful Broad functionality. Analysis of conversations. Lexical and syntactic analysis. Text transcription of log files. Mrp: Multi Chat Client Support Scalable to support other log formats from various chat clients. Current built in support for: AIM Trillian Plain text Mrp: Log File Manipulation Eliminates file read/write overhead from user programs. Built in operations such as loading, parsing, saving, and converting log formats. Why Mr.Proper? Find links that friends send you. Search logs for expressions, words, phrases. Easily convert old conversation logs when switching chat clients. Parse and format conversation logs to make online publishing easier. Type System Control Structures Expressions log l = open(“logroot”, “screenName”, 0); int x = a + b + 1; Loops int i; for (i = 1:10) { print (“hello”); } Functions func log addLogs (log oldLog) { // code } String Functions print() – Prints a string to standard out. void print (string boo); strLength() – Returns the length of a string as an integer. int strLength (string foo) concat() – Joins two strings and returns the result. string concat (string moo, string noo); substr() – Returns part of the input string as a new string. string substr (string poo, int offset, int length); contains() – Searches one string for another (using regexps) and returns a boolean. bool contains (string line, string regexp) Log File Manipulation Functions createLog() – Creates an empty log. open() – Loads a log file into the program. save() – Writes log file back to disk. convert() – Covert log from one format to another. logLength() – Returns the number of messages in the log. Log Message Functions getMessageName() – Returns the name of the person who wrote the message. getText() – Returns the text of the message. getTime() – Returns time of message as number of seconds elapsed since 01/01/1970. createMessage() – Creates a new empty message. setName() – Modifies the name in the message. setText() – Modifies the text of the message. setTime() – Modifies the time of the message. Sample Code func int foo(int x) { return x + 3; } main { int x = 0; for(i = 1:3) { x += foo(x); } print(x); } This program will output the value 15 Log File Manipulation: Function func int wordCount(string word, string path) { log myLog = open(path, “mybuddy”, 1); int i; int length = logLength(myLog) -1 ; int count = 0; string text; for (i = 0:length) { text = getText(getMessage(myLog, i)); if (contains(text, word)) { count += 1; } } return count; } Log File Manipulation: Main main { int count = wordCount(“hello”, “/mylogs/trillian”); print(count); } Program trace? Execution of an Mrp Program MrProper is an interpreted language. The interpreter takes in a file containing Mrp code, and the instructions are executed as they are encountered. Testing Plan Test each component as a module. .mrp test scripts to go over every part of the language. Manual and automated semantic error checking. Test all data types. Control flow. Input/output files. Test component interaction. Lessons Learned Understand the basic tools before you try to use them and before assuming that something is wrong with the code. Create a more detailed project plan. Don’t rely on given milestones. Learn to balance working together and dividing up tasks. The Bright Future of Mr. Proper Added support for other chat clients. User defined log formats for reading and writing. Graphical interface for browsing and searching through log files (tree?)