cs345 project presentation
Download
Skip this Video
Download Presentation
CS345 Project Presentation

Loading in 2 Seconds...

play fullscreen
1 / 17

CS345 Project Presentation - PowerPoint PPT Presentation


  • 70 Views
  • Uploaded on

CS345 Project Presentation. Language: Hmm ++. Tanmaya Godbole , Melissa Olson, Sriratana Sutasirisap . Project Overview: Hmm++. Revise and correct existing BNF Implement First Class Functions Add an object oriented feature: Classes. BNF: What actually exists in Hmm.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'CS345 Project Presentation' - field


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
cs345 project presentation

CS345 Project Presentation

Language: Hmm++

TanmayaGodbole,

Melissa Olson,

Sriratana Sutasirisap

project overview hmm
ProjectOverview: Hmm++
  • Revise and correct existing BNF
  • Implement First Class Functions
  • Add an object oriented feature: Classes
bnf what actually exists in hmm
BNF: What actually exists in Hmm
  • Program : {[ Declaration ]|retType Identifier Function}
  • Function : ( ) Block
  • Declaration : Type Identifier [ [Literal] ]{ , Identifier [ [ Literal ] ] }
  • Type : int|bool| float | list |tuple| object | string | void
  • Statements : { Statement }
  • Statement : ; | Declaration| Block |ForEach| Assignment |IfStatement|WhileStatement|CallStatement|ReturnStatement
  • Block : { Statements }
  • ForEach: for( Expression <- Expression ) Block
  • Assignment : Identifier [ [ Expression ] ]= Expression ;
  • Parameter : Type Identifier
  • IfStatement: if ( Expression ) Block [elseifStatement| Block ]
  • WhileStatement: while ( Expression ) Block
bnf what actually exists in hmm1
BNF: What actually exists in Hmm
  • Expression : Conjunction {|| Conjunction }
  • Conjunction : Equality {&& Equality }
  • Equality : Relation [EquOp Relation ]
  • EquOp: == | !=
  • Relation : Addition [RelOp Addition ]
  • RelOp: < | <= | > | >=
  • Addition : Term {AddOp Term }
  • AddOp: + | -
  • Term : Factor {MulOp Factor }
  • MulOp: * | / | %
  • Factor : [UnaryOp]Primary
  • UnaryOp: - | !
bnf what actually exists in hmm2
BNF: What actually exists in Hmm
  • Primary : callOrLambda|IdentifierOrArrayRef| Literal |subExpressionOrTuple|ListOrListComprehension
  • callOrLambda : Identifier callArgs|LambdaDef
  • callArgs : ([Expression |passFunc { ,Expression |passFunc}] )
  • passFunc : Identifier (Type Identifier { Type Identifier } )
  • LambdaDef : (\\ Identifier { ,Identifier } -> Expression)
  • IdentifierOrArrayRef : Identifier [ [Expression] ]
  • subExpressionOrTuple : ([ Expression [,[ Expression { , Expression } ] ] ] )
  • ListOrListComprehension: [ Expression {, Expression } ] | | Expression[<- Expression ] {, Expression[<- Expression ] } ]
bnf what actually exists in hmm3
BNF: What actually exists in Hmm
  • Identifier : (a |b|…|z| A | B |…| Z){ (a |b|…|z| A | B |…| Z )|(0 | 1 |…| 9)}
  • Literal : Integer | True | False | ClFloat | ClString
  • Integer : Digit { Digit }
  • ClFloat: 0 | 1 |…| 9 {0 | 1 |…| 9}.{0 | 1 |…| 9}
  • ClString: ” {~[“] }”
bnf revised and corrected
BNF: Revised and Corrected
  • Update the concrete syntax, it matches the existing code.
  • Change ClFloat , after the dot, should be a ()+ not a ()*

old: ClFloat: (0 | 1 |…| 9) {0 | 1 |…| 9}.{0 | 1 |…| 9}

new: ClFloat: (0 | 1 |…| 9) {0 | 1 |…| 9}. (0 | 1 |…| 9) {0 | 1 |…| 9})

  • In ifStatement : (in the else for ifStatement)

old: IfStatement: if ( Expression ) Block [elseifStatement| Block ]

new: IfStatement: if ( Expression ) Block [ Block ]

first class function changes in bnf
First Class Function: Changes in BNF

Old

  • Primary : callOrLambda|IdentifierOrArrayRef| Literal |subExpressionOrTuple|ListOrListComprehension

New

  • Primary : callOrLambda|IdentifierOrArrayRef|FuncArg| Literal |subExpressionOrTuple|ListOrListComprehension
  • FuncArg : Identifier ({Parameter})
slide9
First Class Function: OldImplementation

int main() {

list emp = createEmp();

int x = 6000;

println( selectDept20(emp, getSelector()) );

}

(object, bool) getSelector(){

int x = 1000;

return (\ y -> y < x);

}

list selectDept20(list emp,(object, bool) selector) {

int x = 20;

return [ (name, sal) | (_, name, _, _, _, sal, dept) <- emp,

selector(sal), dept == x];

}

list createEmp()

{

return [ (7839, "KING", "PRESIDENT", 0, "17-NOV-81", 5000, 10),

(7369, "SMITH", "CLERK", 7902, "17-DEC-80", 800, 20)];

}

slide10
Program (abstract syntax):

Function = main; Return type = int

params =

Block:

list emp =

Call: createEmp, stackOffset=2

args =

int x =

IntValue: 6000

Call: println, stackOffset=0

args =

Call: selectDept20, stackOffset=3

args =

Variable: emp, LOCAL addr=1

Call: getSelector, stackOffset=3

args =

Function = getSelector; Return type = (object, bool)

params =

Block:

int x =

IntValue: 1000

Return:

Variable: return#getSelector, LOCAL addr=0

Lambda:

[y]

Binary:

Operator: <

Variable: y, LAMBDA addr=0

Variable: x, LAMBDA addr=1

Function = selectDept20; Return type = list

params =

list emp

(object, bool) selector

Block:

int x =

IntValue: 20

Return:

Variable: return#selectDept20, LOCAL addr=0

ListComprehension:

ListTupleExpression: Tuple of:

Variable: name, LOCAL addr=4

Variable: sal, LOCAL addr=5

TupleGenerator:

(null, name, null, null, null, sal, dept)

Variable: emp, LOCAL addr=1

Call: selector, stackOffset=0

args =

Variable: sal, LOCAL addr=5

Binary:

Operator: ==

Variable: dept, LOCAL addr=6

Variable: x, LOCAL addr=3

Function = createEmp; Return type = list

params =

Block:

Return:

Variable: return#createEmp, LOCAL addr=0

ListTupleExpression: List of:

ListTupleExpression: Tuple of:

IntValue: 7839

StringValue: KING

StringValue: PRESIDENT

IntValue: 0

StringValue: 17-NOV-81

IntValue: 5000

IntValue: 10

ListTupleExpression: Tuple of:

IntValue: 7369

StringValue: SMITH

StringValue: CLERK

IntValue: 7902

StringValue: 17-DEC-80

IntValue: 800

IntValue: 20

[

(SMITH, 800)

]

slide11
First Class Function: NewImplementation

int main() {

list emp = createEmp();

int x = 6000;

println( selectDept20(emp, getSelector(int y)) );

}

boolgetSelector(int y) {

int x = 1000;

return y < x;

}

list selectDept20(list emp, (int -> bool) selector) {

int x = 20;

return [ (name, sal) | (_, name, _, _, _, sal, dept) <- emp,

selector(sal), dept == x];

}

list createEmp()

{

return [ (7839, "KING", "PRESIDENT", 0, "17-NOV-81", 5000, 10),

(7369, "SMITH", "CLERK", 7902, "17-DEC-80", 800, 20)];

}

slide12
Program (abstract syntax):

Function = main; Return type = int

params =

Block:

list emp =

Call: createEmp, stackOffset=2

args =

int x =

IntValue: 6000

Call: println, stackOffset=0

args =

Call: selectDept20, stackOffset=3

args =

Variable: emp, LOCAL addr=1

FuncArg: getSelector

args =

int y

Function = getSelector; Return type = bool

params =

int y

Block:

int x =

IntValue: 1000

Return:

Variable: return#getSelector, LOCAL addr=0

Binary:

Operator: INT<

Variable: y, LOCAL addr=1

Variable: x, LOCAL addr=2

Function = selectDept20; Return type = list

params =

list emp

(int -> bool) selector

Block:

int x =

IntValue: 20

Return:

Variable: return#selectDept20, LOCAL addr=0

ListComprehension:

ListTupleExpression: Tuple of:

Variable: name, LOCAL addr=4

Variable: sal, LOCAL addr=5

TupleGenerator:

(null, name, null, null, null, sal, dept)

Variable: emp, LOCAL addr=1

Call: selector, stackOffset=0

args =

Variable: sal, LOCAL addr=5

Binary:

Operator: ==

Variable: dept, LOCAL addr=6

Variable: x, LOCAL addr=3

Function = createEmp; Return type = list

params =

Block:

Return:

Variable: return#createEmp, LOCAL addr=0

ListTupleExpression: List of:

ListTupleExpression: Tuple of:

IntValue: 7839

StringValue: KING

StringValue: PRESIDENT

IntValue: 0

StringValue: 17-NOV-81

IntValue: 5000

IntValue: 10

ListTupleExpression: Tuple of:

IntValue: 7369

StringValue: SMITH

StringValue: CLERK

IntValue: 7902

StringValue: 17-DEC-80

IntValue: 800

IntValue: 20

first class function changes to the code
First Class Function: Changes to the Code

Changes to Parser.jj

  • Changed Primary to also include funcArg
  • funcArg method

- identifies the arguments of the first class function that is passed as a parameter.

- It creates a FuncArg object which is added to the AST

Changes to AbstractSyntax.java

  • FuncArg class

- stores information about parameters and name of the method being passed

first class function parser jj
First Class Function: Parser.jj

Expression primary() :

{ Expression e; Token t;}

{

LOOKAHEAD(3) e = callOrLambda() { return e; }

| LOOKAHEAD(3) e = funcArg() { return e; } //added later

| LOOKAHEAD(2) e = identifierOrArrayRef() { return e; }

| e = literal() { return e; }

| LOOKAHEAD(2) t = { return ListTupleExpression.emptyList(t.beginLine); }

| e = subExpressionOrTuple() { return e; }

| e = listOrListComprehension() { return e; }

/* TODO: Figure out the cast: | type() e = expression() { return e; } */

}

//function added later

Expression funcArg() :

{Token id; Declaration dec = null; List args= new ArrayList(); }

{

id = (dec = parameter() {args.add(dec);})*

{return new FuncArg(id, args);}

}

first class function abstractsyntax java
First Class Function: AbstractSyntax.java

public static class FuncArg extends Expression implements LValue{

private String name;

private List args;

private intlineNum;

public FuncArg(Token t, List a) {

name = t.image;

lineNum = t.beginLine;

args = a;

}

public void display(int level){

super.display(level);

Indenter indent = new Indenter(level);

System.out.print(name);

indent.display(" args = ");

for( Declaration d: args){

d.display(level + 1);

}

}

public String getName(){

return name;

}

@Override

public intgetLineNum(){

return lineNum;

}

}

first class function future changes
First Class Function: Future Changes
  • Update Interpreter to carry out correct evaluation of first class function
  • Be able to store the function in a variable
  • Be able to return function inside function
classes implementation plan
Classes: Implementation Plan
  • not modifying files with structs
  • Syntax

class Identifier {

Constructor

(Identifier)*

(Function)*

}

  • Be able to instantiate the class

ClassType Identifier = create ClassType(parameters);

      • Be able to access internal methods with an instance of a class
ad