QGen: a programming language to develop computer

advertisement
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
Download