250 likes | 452 Views
Q Gen. FHARM Team: F lavio Palandri Antonelli –Project Manager H yunmin Lee – System Tester A arthi Venkataramanan – System Architect R upal Shah – System Integrator M ohip Joarder – Language Guru COMS W4115 Programming Languages and Translators Prof. Alfred V. Aho. Outline.
E N D
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 Pro Program Section 1 Question 1 . . Question n . . Section S Question 1 . . 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 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 Question 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 SECTION TEST contains Is-a Is-a Is-a INSTRUCTION SECTION QUESTION SECTION RESULT SECTION shows shows contains INSTRUCTION QUESTION RESULTS of for
Architecture QGen Source Program Front End Back End TreeWalker Target Java Program Section Lexer & Parser Syntax Tree ANTLR GUI Manager Question grammar.g walker.g Interactive GUI Test Application Runnable Java Program Java Compiler JVM
Outline • Introduction & Motivations • Language Basics • Language Design & Architecture • Demo • Language Implementation & Testing • Conclusions
Demo Source Code sectionfirstSection{ question q1{ type: yesNo; text: "Is the grammar S -> Sa | b left recursive?"; answer: "Yes"; score: 5; } question q2 { type: fillBlank; text: "___ binding binds the data at run time"; answer: "Dynamic"; score: 5; } q1;q2; } First Section sectioneasySection { question q3 { type: freeText; text: "What is the input language of Assembler?"; answer: "Assembly language"; score: 3; } q3; } Easy Section
sectionhardSection { 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; } listl; for (i = 0 to 10){ addToList(l,i); } 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(); } Hard Section Main function
Demonstration • Now: Pop PLT quiz!
Outline • Introduction & Motivations • Language Basics • Language Design & Architecture • Demo • Language Implementation & Testing • Conclusions
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