Espresso! A small cup of Java •Erin Adelman - [email protected] •Aaron Bauman - [email protected] •Philip Coakley - [email protected] •Joya Zuber - [email protected] CS4115 Programming Languages and Translators Professor.

Download Report

Transcript Espresso! A small cup of Java •Erin Adelman - [email protected] •Aaron Bauman - [email protected] •Philip Coakley - [email protected] •Joya Zuber - [email protected] CS4115 Programming Languages and Translators Professor.

Espresso!
A small cup of Java
•Erin Adelman
- [email protected]
•Aaron Bauman - [email protected]
•Philip Coakley - [email protected]
•Joya Zuber - [email protected]
CS4115 Programming Languages and Translators
Professor Stephen Edwards, December 2003
Espresso! is:

A simple and efficient way for programmers of all
levels to create java applets.

An educational language to familiarize novice
programmers with java syntax.

Similar to Tcl and Java in syntax and semantics
11/6/2015
Espresso! Programming Language
2
Key Features

Simple
11/6/2015
Espresso! Programming Language
3
Key Features

Simple
 Educational
11/6/2015
Espresso! Programming Language
4
Key Features

Simple
 Educational
 Object-Oriented
11/6/2015
Espresso! Programming Language
5
Key Features

Simple
 Educational
 Object-Oriented
 Portable
11/6/2015
Espresso! Programming Language
6
Key Features

Simple
 Educational
 Object-Oriented
 Portable
 Efficient
11/6/2015
Espresso! Programming Language
7
Key Features

Simple
 Educational
 Object-Oriented
 Portable
 Efficient
 Scalable
11/6/2015
Espresso! Programming Language
8
A Taste of Espresso!
Hello, World!
card HelloWorld {
print(“Hello World!”);
}
11/6/2015
Espresso! Programming Language
9
A Taste of Espresso!
Hello, World!
11/6/2015
Espresso! Programming Language
10
A Taste of Espresso!
Data Types and Objects

number

– Java double

string
– Java String

number array
– Java double[]

string array
– Java String[]

object
–
–
–
–
–
–
–
TextBox
Button
CheckBox
List
Image
Oval
Rectangle
object array
11/6/2015
Espresso! Programming Language
11
A Taste of Espresso!
Program Structure
card card_name {
statement;
statement;
…
statement;
}
11/6/2015
Espresso! Programming Language
12
A Taste of Espresso!
Type Declarations
number phil = 5;
:
double phil = 5;
string joya = “Joya”;
:
String joya = “Joya”;
TextBox myTextBox;
:
11/6/2015
EspressoTextBoxRT myTextBox = new
EspressoTextBoxRT();
Espresso! Programming Language
13
A Taste of Espresso!
Array Declarations
number[3] aaron = 5.4;
:
11/6/2015
double[] aaron = new double[3];
for( int i=0; i<3; i++ )
aaron[i] = 5.4;
Espresso! Programming Language
14
A Taste of Espresso!
Assignments
phil = phil + 5;
joya = joya + “ is cool”;
aaron[2] = 5;
erin[0] = “Sneak”;
myButton.setWidth(phil);
11/6/2015
Espresso! Programming Language
15
A Taste of Espresso!
Sample Program
Espresso! program (21 lines)
card HelloWorld {
);
Image baby;
baby.setSource(
"http://www.columbia.edu/~adb54/baby.jpg"
Oval myOval;
number cx = 150;
number cy = 90;
number cwidth = 100;
number cheight = 50;
myOval.setX(cx);
myOval.setY(cy);
myOval.setWidth(cwidth);
myOval.setHeight(cheight);
myOval.setColor(red);
Rectangle myRectangle;
myRectangle.setX(cx + 7);
myRectangle.setY(cy + 30);
myRectangle.setWidth(20);
myRectangle.setHeight(20);
print("Hello, World!", cx+10, cy+25);
}
11/6/2015
Java program (106 lines)
import
import
import
import
import
java.awt.*;
java.awt.event.*;
java.applet.*;
java.net.*;
java.util.*;
public class HelloWorld extends Applet implements
Runnable
{
Image img;
Graphics g2 = null;
Image I2;
int sx;
int sy;
…
…
public synchronized void paint(Graphics g) {
g = getGraphics();
I2 = createImage(getWidth(), getHeight());
Graphics temp = I2.getGraphics();
temp.setColor(getBackground());
temp.fillRect(0, 0, getWidth(),
getHeight());
temp.drawImage(img, 0, 0, this);
temp.setColor(Color.white);
…
…
Espresso! Programming Language
16
A Taste of Espresso!
Sample Program
11/6/2015
Espresso! Programming Language
17
A Taste of Espresso!
Development

Create and analyze sample applets with desired
Espresso! functionality.
 Java applet control flow and event handling are
confusing.
 How can we abstract this applet architecture from
the user?
 A robust back end!
11/6/2015
Espresso! Programming Language
18
11/6/2015
Espresso! Programming Language
19
A Taste of Espresso!
State

The walker and Code
Generation class work
together to maintain 5
states:
–
–
–
–
–

Declarations
Initializations
Declaring
Initializing
Executing
Drawing
Action Listening
Execute
Draw
Each state represents a
section in the generated
applet file.
11/6/2015
public class myApplet extends applet {
Actions
}
Espresso! Programming Language
20
A Taste of Espresso!
State
card HelloWorld {
public class myApplet extends applet {
Image baby;
baby.setSource(
"http://www.columbia.edu/~adb54/baby.jpg");
Oval myOval;
number cx = 150;
number cy = 90;
number cwidth = 100;
number cheight = 50;
myOval.setX(cx);
myOval.setY(cy);
myOval.setWidth(cwidth);
myOval.setHeight(cheight);
myOval.setColor(red);
Rectangle myRectangle;
myRectangle.setX(cx + 7);
myRectangle.setY(cy + 30);
myRectangle.setWidth(20);
myRectangle.setHeight(20);
print("Hello, World!", cx+10, cy+25);
Declarations
Initializations
}
Execute
Draw
Actions
}
11/6/2015
Espresso! Programming Language
21
A Taste of Espresso!
Scope

Think Globally
 Espresso! has a single scope
 Variables can be declared at
any time in Espresso!, but will
all be initialized globally in the
generated Java file.
11/6/2015
Espresso! Programming Language
22
A Taste of Espresso!
Runtime Library

The Runtime Library includes a suite of
wrapper classes that build AWT constructs.
 RTL definitions are loaded into a type table
that is used to verify library semantics
 The library is fully expandable to support
new user defined objects and functions.
11/6/2015
Espresso! Programming Language
23
A Taste of Espresso!
Runtime Library Definition
Button::EspressoButtonRT(this){
void setText( String )
String getText( void )
void action ( void )
}
11/6/2015
Espresso! Programming Language
24
A Taste of Espresso!
Testing

Build language elements one by one,
testing as we go.
 Have others outside the team write
Espresso programs.
– Espresso! is so simple even UBW majors
and monkeys can use it!
11/6/2015
Espresso! Programming Language
25
Lessons Learned

Start early!
 Modularity is important for simplicity and
effective testing.
 It is difficult to accommodate four busy
schedules.
 Espresso! requires a lot of caffeine.
11/6/2015
Espresso! Programming Language
26
Future Developments

Expand the Runtime Library to include
more object types and methods.
 Allow the Espresso! programmer some
control over the Applet Layout Manager
 Add keywords to dictate the design of the
generated parent website
11/6/2015
Espresso! Programming Language
27