Advanced Class and Feature Wizard
Contents
Overview
As a summary we could say that we improve the usability of the most important wizards, e.g. classwizard and featurewizard, by adding new features, extending the user interface and simplifying the handling.
Following the priority list of our project, beginning with the most important aspect of our work
- editor based wizard execution
- combobox for post- and precondition
- pick & drop
- undo/redo functionality within the wizard
- docking the wizard in a fixed window - not a pop-up anymore
- update permanently the editor while using the wizard
- tooltips which provides help
- beginner-tour
Work
Right now, we are occupied with:
- Preparing the graphical interface of the feature- and class-wizard
- design decisions concerning GUI
- finding most important classes in ES that must be changed
Problems
- Debugger is not available yet
- the difficulties with compiling forced us to concentrate only on merging the class- and feature-wizard
TO-DO
- ...
Milestones
M1: April 30, 2006
- editing wikipage
- ES compiled on windows/linux-x86
M2: June 14, 2006
- every team mate succeeded in compiling the newest version of ES
- beginning of the main work: feature- and class-wizard
M3: June 25, 2006
I am proud to announce that our project is ready for the up-comming presentation in the ETH main hall. Thx a lot to all team mates and everyone who supported us.
Your Teamleader Christoph
M4: June 27, 2006
You can find all important files concerning the project and the presentation on my page.
End: June 28, 2006
Today, the presentation took place and we ranked 5th, winning some price money. I want to thank Prof. Meyer for his generosity.
Project Details
Files
You can find the actual files on this page.
Editor Based Wizard Execution
Motivation
Wizards are usually only accessible through a GUI Window. This is convenient for beginners, but will slow down advanced programmers. So there should be a possibility to access the wizard through the editor directly with an interface similar to a command line interface.
Idea
To execute the wizard within the editor you have to do the following:
- Write the command (possibly over some lines)
- Press a hotkey to execute the command
Which hotkey we use is to be determined.
The goal of the language to express the commands is to be as short and fast typeable as possible. Therefore it refrains from using charactes for which multiple keys must be pressed. As reference, the US-English and Swiss-German keyboard layout is used. The slash '/' is not a one key character on the Swiss-German keyboard, so it can be substituted by '$'
Since the command is only an intermediate format, structure and readability are not considered first priority here.
Example
To create class TEST which is deferred you have to do the following:
- Write "/c test,d ."
- Press the hotkey
Create a class COMPLEX with features real, imag, add and mult, arguments of add and mult are not void by precondition:
- Write
/c complex
d read
d imag
1d add complex toadd,n
1d mult complex tomult,n
.
- press the Hotkey
Lexical Analysis
Token seperators:
- Whitespaces (' ','\n','\r','\t')
- ','
- '/'
- '$' (for Swiss-German keyboards)
The last three are tokens themselves, whitespaces are discarded
Note: '.' does not seperate tokens.
Syntax
As the project is still in a starting phase, the information here is incomplete and could be changed.
The syntax is made easy to parse, since we have not much experience with parsers.
'##' means that the two symbols have no whitespace bewteen
These symbols represent a stream of tokens:
- wizardExecBlock ::= blockStartChar classCreate {featureCreate}* blockEndChar
- classCreate ::= [num_of_parents] ## 'c' className [inheritance-list] [','attribute_list]
- inheritance-list ::= {inheritance_clause}*
- inhertitance_clause ::= {identifier [',' attribute_list]}+
- className ::= identifier
- featureCreate ::= [num_of_arguments] ## return_type name {argument_type argument_name}* [','attribute_list]
- return_type, argument_type ::= type
- name, argument_name ::= identifier
These symbols represent one token:
- blockStartChar ::= '/' | '$'
- blockEndChar ::= '.'
- type ::= {'.' attribute}* identifier [',' attribute_list]
- identifier ::= {letter}*
- attribute_list ::= {attribute}+
- attribute ::= letter
- letter ::= 'a'..'z'
- number ::= digit+
- digit ::= '0'..'9'
Explanation
- Feature creation:
- If num_of_arguments if not given, the feature is a attribute, otherwise it's a method.
- If return type is 'v'='void' then it's a procedure.
- Some mappings/abbreviations from heavily used types are intended. For example 'i'='integer', 's'='string', 'd'='double', 'f'='real'
- Class names are automatically converted to uppercase (it's easier to write all in lowercase)
Working on
- Specify how to do lexical analysis.
Team
- Volkan Arslan (Advisor)
- Christoph Lins (project leader, implementation)
- Andreas Hasler (implementation)
- Timon Hertli (implementation)
- Peter von Rohr (GUI)
- David Flatz (GUI)
- Damien Müllhaupt (GUI)