PLT September 19, 2006 Al Aho 1. Project * form a team * design a little language * write a language reference manual * implement the LRM * write a final report * demo your project 2. Your Team 2.1 Roles * language maven * project manager * system architect * systems integrator * verification and validation 2.2 Skills * project management * teamwork * communication (both oral and written) 3. Language Design * write a white paper ("value proposition") for your language - e.g., Java white paper * then write a tutorial on how to write programs in your language - e.g., Appendix A of K&R * Example 1: Java - a general purpose programming language for the Internet age - attributes: simple, object-oriented, network-savvy, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic * Example 2: AWK - a pattern-action language that can be applied to a wide variety of computing and data-manipulation tasks - attributes: simple, convenient, expressive, useful for everyday tasks, easy for nonprogrammers to learn, widely available * AWK Tutorial (Ch 1 of awk book) - Program 1: p. 1 of awk book - The structure of an awk program (p. 2) - Running an awk program (p. 3) - Errors (p. 4) - Print every line (p. 5) - Print certain fields (p. 6) - Selection (p. 9) - Built-in variables and functions - Control-flow statements - Associative arrays Input: a list of names and values, e.g., stephen 20 jia 5 stephen 30 ty 10 stephen 40 deepti 7 Output: a list of names and total values associated with each name sorted by name, e.g., deepti 7 jia 5 stephen 90 ty 10 Awk program: { total[$1] += $2 } END { for (name in total) print name, total[name] | "sort" } 4. Implement the LRM * what this course is about 5. Final Project Report 1. Introduction * Include your language white paper. 2. Language Tutorial * A short explanation telling a novice how to use your language. 3. Language Manual * Include your language reference manual. 4. Project Plan * Identify process used for planning, specification, development and testing * Include a one-page programming style guide used by the team * Show your project timeline * Identify roles and responsibilities of each team member * Describe the software development environment used (tools and languages) * Include your project log 5. Architectural Design * Give block diagram showing the major components of your translator * Describe the interfaces between the components * State who implemented each component 6. Test Plan * Show two or three representative source language programs along with the target language program generated for each * Show the test suites used to test your translator * Explain why and how these test cases were chosen * What kind of automation was used in testing * State who did what 7. Lessons Learned * Each team member should explain his or her most important learning * Include any advice the team has for future teams 8. Appendix * Attach a complete code listing of your translator with each module signed by its author