QGen FHARM Team: Flavio Palandri Antonelli –Project Manager Hyunmin Lee – System Tester Aarthi Venkataramanan – System Architect Rupal Shah – System Integrator Mohip Joarder – Language Guru COMS W4115 Programming Languages and Translators Prof. Alfred V. Aho Outline ▸ ▸ ▸ ▸ ▸ ▸ Introduction & Motivations Language Basics Language Design & Architecture Demo Language Implementation & Testing Conclusions What is QGen? • QGen, is a programming language to develop computer-based test applications. + = QGen With QGen you can.. • Generate computer based tests and surveys • Define different types of questions and organize them into logically meaningful sections • Make your tests adapt to the ability of the user • Provide immediate results/feedback Use QGen for.. Customer Insights • Employee Feedback Research Education and Training Just For Fun ! Why QGen? • Eases the process of creating and evaluating quizzes and surveys • Yet provides ample flexibility to allow for customization and dynamic behavior. • The output is a portable java application Outline ▸ ▸ ▸ ▸ ▸ ▸ Introduction & Motivations Language Basics Language Design & Architecture Demo Language Implementation & Testing Conclusions Overall Structure of a QGen Program Program Section 1 Question 1 . . Question n . . Section S Pro1 Question . . Question m Main • Display questions • Organize sections • Evaluate results Sample Program section HelloWorldSection { question q1 { type: multipleChoice; text: "What's the most simplest program usually adopted 2 Question show a language example?"; image: "images/hw.jpg"; answer: "Hello World"; choices: ("Hello World", "Hello Moon", "Hi World", "Goodbye World"); score: 5; } q1; } main { showInstruction("Simple test", "Select the correct choice in the next question."); showSection(HelloWorldSection); showResult(); } Section Sections organization Sample Program Output 1 showInstruction("Simple test", "Select the correct choice in the next question."); Sample Program Output 2 showSection(HelloWorldSection); Sample Program Output 3 showResult(); Syntactic Constructs • • • Looping structures – For – While Conditional structures – if/else Built in functions – showInstruction(String title, String description) – showResult() – getSectionScore(Section s) – getQuestionScore(Section s, Question q) – getAnswer(Section s, Question q) – addToList(List l, String s) Outline ▸ ▸ ▸ ▸ ▸ ▸ Introduction & Motivations Language Basics Language Design & Architecture Demo Language Implementation & Testing Conclusions Abstract Model of a Test followed by contains SECTION Is-a Is-a INSTRUCTION SECTION Is-a QUESTION SECTION shows RESULT SECTION shows contains of for INSTRUCTION TEST QUESTION RESULTS Architecture QGen Source Program Front End Lexer & Parser Syntax Tree Back End Target Java Program Section GUI Manager Question TreeWalker ANTLR grammar.g Interactive GUI Test Application walker.g JVM Runnable Java Program Java Compiler Outline ▸ ▸ ▸ ▸ ▸ ▸ Introduction & Motivations Language Basics Language Design & Architecture Demo Language Implementation & Testing Conclusions Demo Source Code section firstSection{ question q1{ type: yesNo; text: "Is the grammar S -> Sa | b left recursive?"; answer: "Yes"; score: 5; } First Section question q2 { type: fillBlank; text: "___ binding binds the data at run time"; answer: "Dynamic"; score: 5; } q1;q2; } section easySection { question q3 { type: freeText; text: "What is the input language of Assembler?"; answer: "Assembly language"; score: 3; } q3; } Easy Section section hardSection { question q4 { type: multipleChoice; text: "Which is the best parser among the given choices?"; answer: "Canonical-LR"; choices: ("Canonical-LR", "Simple LR", "LALR", "LL(1)"); score: 10; } list l; for (i = 0 to 10){ addToList(l,i); } Hard Section question q5 { type: multipleChoice; text: "How many no. of min. states will be generated after converting the following NFA to DFA?"; image: "NFA.jpg"; answer: "4"; choices: l; score: 10; } q4; q5; } main{ showInstruction("Computer Adaptive PLT Test", "Depending on your answers different questions will be shown in the next section"); showSection(firstSection); if (getSectionScore(firstSection) > 5) { showSection(hardSection); } else{ showSection(easySection); } showResult(); } Main function Demonstration • Now: Pop PLT quiz! Outline ▸ ▸ ▸ ▸ ▸ ▸ Introduction & Motivations Language Basics Language Design & Architecture Demo Language Implementation & Testing Conclusions Development Environment Tools & Software ANTLR Purpose Takes grammar + tokens as input and produces Lexer + Parser + Walker Eclipse IDE + ANTLR plugin IDE + ANTLR plugin for grammar debugging Google code + Subversion Version control Java + Swing Back-end & Display Test plan Phase To do Front-end Unit Test - Test every grammar production Back-end Unit Test - Test with hand-made target programs Integration Test - Verify equivalence between treewalker output and hand-made target programs System Test - Test the entire QGen compiler Front-end Test with ANTLR Plugin Conclusions • Lessons learned – – – – – Meet regularly Keep it simple (Life is hard enough!) User‐friendly languages are hard to implement and test Decouple front-end and back-end development … • Future Work & Improvements - Import questions from a file & store results to a DB - Enforce time-limits - Statistical results