introducon - columbia universityaho/cs4115_spring-2009/lectures/09-04-29_fire.pdfintroducon friendly...

28

Upload: dotruc

Post on 21-Aug-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult
Page 2: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Introduc)on

TristanNaumann

SaharHasan

SteveHehl

BrianLu

Page 3: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Introduc)on

FriendlyInterac)veRecursionEducator(FIRE)•  Recursionisoneofthemostdifficulttopicsfornoviceprogrammerstounderstand

•  Teachthroughinterac)vevisualiza)on:usersseetheprogressionofrecursivecallsandthepropaga)onofresultsbacktotheoriginalcall

•  Simplesyntax:more)melearningrecursion,less)medebuggingcode

Page 4: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

AnexampleusingtheFibonaccinumbers:

define recursive int fibonacci (int n): base: {n == 0} 0 {n == 1} 1 recursive: { } fibonacci(n–1) + fibonacci(n–2)

Page 5: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

AnexampleusingtheFibonaccinumbers:

define recursive int fibonacci (int n): base: {n == 0} 0 {n == 1} 1 recursive: { } fibonacci(n–1) + fibonacci(n–2)

Keywordssignifyingthebeginningoftherecursivefunc)ondefini)on

Page 6: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

AnexampleusingtheFibonaccinumbers:

define recursive int fibonacci (int n): base: {n == 0} 0 {n == 1} 1 recursive: { } fibonacci(n–1) + fibonacci(n–2)

Returndatatype

Page 7: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

AnexampleusingtheFibonaccinumbers:

define recursive int fibonacci (int n): base: {n == 0} 0 {n == 1} 1 recursive: { } fibonacci(n–1) + fibonacci(n–2)

Func)onname

Page 8: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

AnexampleusingtheFibonaccinumbers:

define recursive int fibonacci (int n): base: {n == 0} 0 {n == 1} 1 recursive: { } fibonacci(n–1) + fibonacci(n–2)

Comma‐delimitedparameterlist

Page 9: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

AnexampleusingtheFibonaccinumbers:

define recursive int fibonacci (int n): base: {n == 0} 0 {n == 1} 1 recursive: { } fibonacci(n–1) + fibonacci(n–2)

Indentedblockofbasecasesoftheform:{condi)on}returnVal

Page 10: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

AnexampleusingtheFibonaccinumbers:

define recursive int fibonacci (int n): base: {n == 0} 0 {n == 1} 1 recursive: { } fibonacci(n–1) + fibonacci(n–2)

Indentedblockoftheimplicitlyreturnedrecursivecase:{}recursiveCall

Page 11: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

Othersyntac)calfeatures•  Watchblock:comma‐delimitedlistofvariableswhosevaluestheuserwishestotrack

•  Explicitcondi)onals(if/else)andloops(for,while)

•  Built‐infunc)onsforlists•  Printstatementsandcomments

Page 12: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

Whitespacing•  FIREusesPython‐basedwhitespaceindenta)onforblockdelimi)nginsteadofcurlybraces

•  Indenta)onfollowscertainstatementsandsignifiesthebeginningofablock

•  Dedenta)onsignifiestheendofablock

Page 13: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

Advantages•  Makescodemorereadable

•  Easiertowritebecausededentsareautoma)callymatchedtoindentsfortheuser

Disadvantages

•  Hardertoimplementbecauseindenta)onlevelsmustbetrackedusingastackasopposedtosimplydetec)ngmatchingbraces

Page 14: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Syntax

Stackimplementa)onnotesfromPython•  Foreachline,compareindenta)onleveltotopofstack(ini)allycontainsonepushed0)–  Ifequal,donothing–  Iflarger,pushontostackandissueINDENT–  Ifsmaller,popallnumbersonstackthatarelargerandissueDEDENTforeach

•  OnEOF,issueremainingDEDENTS

Page 15: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Output

Screenshotofarecursivecallstep

Page 16: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Output

Screenshotofareturnvaluepropaga)ngback

Page 17: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

SystemArchitecture

Overview

ANTLRInputStream Lexer WSFilter Common

TokenStream

ParserString

Template Fire.java Javacompiler

Fire.classJVM

Errorchecking+scoping

Characters Tokens

Parsed

GUIpackage Backend Frontend

Userfile

Page 18: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

SystemArchitecture

Overview

ANTLRInputStream Lexer WSFilter Common

TokenStream

ParserString

Template Fire.java Javacompiler

Fire.classJVM

Errorchecking+scoping

Characters Tokens

Parsed

GUIpackage Backend Frontend

Userfile

Page 19: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

SystemArchitecture

Overview

ANTLRInputStream Lexer WSFilter Common

TokenStream

ParserString

Template Fire.java Javacompiler

Fire.classJVM

Errorchecking+scoping

Characters Tokens

Parsed

GUIpackage Backend Frontend

Userfile

Page 20: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

SystemArchitecture

Overview

ANTLRInputStream Lexer WSFilter Common

TokenStream

ParserString

Template Fire.java Javacompiler

Fire.classJVM

Errorchecking+scoping

Characters Tokens

Parsed

GUIpackage Backend Frontend

Userfile

Page 21: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

SystemArchitecture

Overview

ANTLRInputStream Lexer WSFilter Common

TokenStream

ParserString

Template Fire.java Javacompiler

Fire.classJVM

Errorchecking+scoping

Characters Tokens

Parsed

GUIpackage Backend Frontend

Userfile

Page 22: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

SystemArchitecture

Developmenttools•  EclipseGanymede+Subeclipse

•  ANTLRv3+StringTemplate3.2

•  JavaSE6+SwingManagementtools

•  GoogleCode•  GoogleDocs

Page 23: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Tes)ng

Mul)‐stagetes)ngapproach•  Unittes)ngwhitespacing•  Unittes)nggrammarproduc)onrules

•  Usertes)ngfullexamples

Page 24: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Tes)ng

Whitespacetes)ngSource(fibonacci.fire) Tokenstreamoutput

define recursive int fibonacci (int n): <DEFINE> <WS> <RECURSIVE> <WS> <TINT> <WS> <NAME> <WS> <LPAREN> <TINT> <WS> <NAME> <RPAREN> <COLON> <NEWLINE>

base: <INDENT> <BASE> <COLON> <NEWLINE>

{n == 0} 0 <INDENT> <LCURLY> <NAME> <WS> <EQ> <WS> <INT> <RCURLY> <WS> <INT> <NEWLINE>

{n == 1} 1 <LCURLY> <NAME> <WS> <EQ> <WS> <INT> <RCURLY> <WS> <INT> <NEWLINE>

recursive: <DEDENT> <RECURSIVE> <COLON> <NEWLINE>

{ } fibonacci(n–1) + fibonacci(n–2) <INDENT> <LCURLY> <WS> <RCURLY> <WS> <NAME> <LPAREN> <NAME> <MINUS> <INT> <RPAREN> <WS> <PLUS> <WS> <NAME> <LPAREN> <NAME> <MINUS> <INT> <RPAREN> <NEWLINE>

<DEDENT> <DEDENT>

Page 25: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Tes)ng

Grammarproduc)ontes)ng

Outputresultofcomparison

Equivalent(PASS) Notequivalent(FAIL)

Tester:TranslateprogramtoJavaandcomparetotargetcode

Inputs

FIREProgram Javatargetcode

Page 26: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Conclusion

Lessonslearned•  User‐friendlylanguagesarehardertowriteandtest

•  Pythonasareferencelanguage:noteverythingtranslateswelltoJava

Futureimprovements

•  Supportforcorecusion•  Mul)pletypesofoutput

Page 27: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult

Conclusion

Keybenefits•  Supportsmanycommonrecursionsofmul)pletypes

•  Shallowlearningcurve;codeisbotheasytowriteandunderstand

•  Automatedinstrumenta)onofthecodeandvisualoutput

Page 28: Introducon - Columbia Universityaho/cs4115_Spring-2009/lectures/09-04-29_FIRE.pdfIntroducon Friendly Interacve Recursion Educator (FIRE) • Recursion is one of the most difficult