SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
Implementing a Simple Interpreter
Ray Song

May 27, 2012

Ray Song

Implementing a Simple Interpreter
Flow sheet

Lexical analysis
Grammatical analysis

Figure : Flow

Ray Song

Implementing a Simple Interpreter
Flow sheet

Lexical analysis
Grammatical analysis

Figure : Flow

Ray Song

Implementing a Simple Interpreter
Lexical Analysis

manual
flex

Ray Song

Implementing a Simple Interpreter
Lexical Analysis

manual
flex

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Tokens

identifier
integer
string
while
if
else
print
NEWLINE
NO WHITESPACE

Ray Song

Implementing a Simple Interpreter
Off-side rule

def hello():
print ‘world’
indentation sensitive
Ex: ISWIM(1966), occam(1983), Miranda(1985),
Haskell(1990), Python(1991)

Ray Song

Implementing a Simple Interpreter
Off-side rule

def hello():
print ‘world’
indentation sensitive
Ex: ISWIM(1966), occam(1983), Miranda(1985),
Haskell(1990), Python(1991)

Ray Song

Implementing a Simple Interpreter
Off-side rule - Cont.

represented as virtual tokens
INDENT
DEDENT

Ray Song

Implementing a Simple Interpreter
Off-side rule - Cont.

represented as virtual tokens
INDENT
DEDENT

Ray Song

Implementing a Simple Interpreter
Off-side rule - Cont.

represented as virtual tokens
INDENT
DEDENT

Ray Song

Implementing a Simple Interpreter
Example

if a > 2:
print 5
print a
IF a > 2 : NEWLINE INDENT PRINT 5 NEWLINE
DEDENT PRINT a NEWLINE

Ray Song

Implementing a Simple Interpreter
Grammatical analysis

Cocke–Younger–Kasami algorithm
Earley’s algorithm
LR parser
Recursive-descent parser

Ray Song

Implementing a Simple Interpreter
Grammatical analysis

Cocke–Younger–Kasami algorithm
Earley’s algorithm
LR parser
Recursive-descent parser

Ray Song

Implementing a Simple Interpreter
Grammatical analysis

Cocke–Younger–Kasami algorithm
Earley’s algorithm
LR parser
Recursive-descent parser

Ray Song

Implementing a Simple Interpreter
Grammatical analysis

Cocke–Younger–Kasami algorithm
Earley’s algorithm
LR parser
Recursive-descent parser

Ray Song

Implementing a Simple Interpreter
Tools

Bison
Can generate C, C++ and Java codes
ANTLR

Ray Song

Implementing a Simple Interpreter
Tools

Bison
Can generate C, C++ and Java codes
ANTLR

Ray Song

Implementing a Simple Interpreter
Tools

Bison
Can generate C, C++ and Java codes
ANTLR

Ray Song

Implementing a Simple Interpreter
Expression

Precedence climbing method
Shunting-yard algorithm
Parsing expressions in infix notation
Output in Reverse Polish notation (RPN)
Output in Abstract syntax tree (AST)
Operator precedence parser

Ray Song

Implementing a Simple Interpreter
Expression

Precedence climbing method
Shunting-yard algorithm
Parsing expressions in infix notation
Output in Reverse Polish notation (RPN)
Output in Abstract syntax tree (AST)
Operator precedence parser

Ray Song

Implementing a Simple Interpreter
Expression

Precedence climbing method
Shunting-yard algorithm
Parsing expressions in infix notation
Output in Reverse Polish notation (RPN)
Output in Abstract syntax tree (AST)
Operator precedence parser

Ray Song

Implementing a Simple Interpreter
Expression

Precedence climbing method
Shunting-yard algorithm
Parsing expressions in infix notation
Output in Reverse Polish notation (RPN)
Output in Abstract syntax tree (AST)
Operator precedence parser

Ray Song

Implementing a Simple Interpreter
Expression

Precedence climbing method
Shunting-yard algorithm
Parsing expressions in infix notation
Output in Reverse Polish notation (RPN)
Output in Abstract syntax tree (AST)
Operator precedence parser

Ray Song

Implementing a Simple Interpreter
Expression

Precedence climbing method
Shunting-yard algorithm
Parsing expressions in infix notation
Output in Reverse Polish notation (RPN)
Output in Abstract syntax tree (AST)
Operator precedence parser

Ray Song

Implementing a Simple Interpreter
Parser combinator

Straightforward to construct
Readability
Parsec

Ray Song

Implementing a Simple Interpreter
Parser combinator

Straightforward to construct
Readability
Parsec

Ray Song

Implementing a Simple Interpreter
Parser combinator

Straightforward to construct
Readability
Parsec

Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl
Two top-level nonterminals: STMT and EXPR
STMT: SIMPLE STMT ‘n’ | COMPOUND
SIMPLE STMT: EXPR
SIMPLE STMT: IDENT ‘=’ EXPR
SIMPLE STMT: BREAK
SIMPLE STMT: print EXPR
COMPOUND: if EXPR ’:’ SUITE OPT ELSE
COMPOUND: while EXPR ’:’ SUITE
SUITE: many1(‘n’) INDENT many1(STMT) DEDENT
SUITE: SIMPLE STMT ‘n’
OPT ELSE: ELSE ’:’ SUITE
OPT ELSE: /* empty */
Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Impl - Cont.
EXPR: EXPR ‘==’ TERM
EXPR: EXPR ’ !=’ TERM
EXPR: TERM
TERM: TERM ‘+’ FACTOR
TERM: FACTOR
FACTOR: FACTOR ‘*’ ATOM
FACTOR: ATOM
ATOM: identifier
ATOM: literal integer
ATOM: literal string
ATOM: ‘(’ EXPR ’)’

Ray Song

Implementing a Simple Interpreter
Example

if a > 2:
print 5
print a

Ray Song

Implementing a Simple Interpreter
Example - Cont.

Figure : Parse
Ray Song

Implementing a Simple Interpreter
Interpreting

Abstract syntax tree (AST).
Define semantics for each class of nodes
object(atom): trivial
binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 =
eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT).
Object & BinOP inherit from Expr

Ray Song

Implementing a Simple Interpreter
Interpreting

Abstract syntax tree (AST).
Define semantics for each class of nodes
object(atom): trivial
binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 =
eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT).
Object & BinOP inherit from Expr

Ray Song

Implementing a Simple Interpreter
Interpreting

Abstract syntax tree (AST).
Define semantics for each class of nodes
object(atom): trivial
binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 =
eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT).
Object & BinOP inherit from Expr

Ray Song

Implementing a Simple Interpreter
Interpreting

Abstract syntax tree (AST).
Define semantics for each class of nodes
object(atom): trivial
binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 =
eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT).
Object & BinOP inherit from Expr

Ray Song

Implementing a Simple Interpreter
Interpreting

Abstract syntax tree (AST).
Define semantics for each class of nodes
object(atom): trivial
binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 =
eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT).
Object & BinOP inherit from Expr

Ray Song

Implementing a Simple Interpreter
Subclasses of Stmt - Cont.

Assign
eval() need a parameter: Binding (which variable holds which
object)
ExprStmt
Print
Continue (throwing an exception)

Ray Song

Implementing a Simple Interpreter
Subclasses of Stmt - Cont.

Assign
eval() need a parameter: Binding (which variable holds which
object)
ExprStmt
Print
Continue (throwing an exception)

Ray Song

Implementing a Simple Interpreter
Subclasses of Stmt - Cont.

Assign
eval() need a parameter: Binding (which variable holds which
object)
ExprStmt
Print
Continue (throwing an exception)

Ray Song

Implementing a Simple Interpreter
Subclasses of Stmt - Cont.

Assign
eval() need a parameter: Binding (which variable holds which
object)
ExprStmt
Print
Continue (throwing an exception)

Ray Song

Implementing a Simple Interpreter
Subclasses of Stmt - Cont.

Assign
eval() need a parameter: Binding (which variable holds which
object)
ExprStmt
Print
Continue (throwing an exception)

Ray Song

Implementing a Simple Interpreter

Weitere ähnliche Inhalte

Andere mochten auch

Skills Required To Become a Professional Translator
Skills Required To Become a Professional TranslatorSkills Required To Become a Professional Translator
Skills Required To Become a Professional TranslatorHSS Translation
 
NYC Parking Tickets debunking 3 myths
NYC Parking Tickets debunking 3 mythsNYC Parking Tickets debunking 3 myths
NYC Parking Tickets debunking 3 mythsLawrence Berezin
 
Translation and Interpretation
Translation and InterpretationTranslation and Interpretation
Translation and Interpretationwendo1513
 
Types and modes of interpretation
Types and modes of interpretationTypes and modes of interpretation
Types and modes of interpretationJorge Carro
 
Translation vs. Interpretation
Translation vs. Interpretation Translation vs. Interpretation
Translation vs. Interpretation Rolando Tellez
 
Translation vs. Interpretation
Translation vs. Interpretation Translation vs. Interpretation
Translation vs. Interpretation Rolando Tellez
 
Translation Types
Translation TypesTranslation Types
Translation TypesElena Shapa
 

Andere mochten auch (9)

Skills Required To Become a Professional Translator
Skills Required To Become a Professional TranslatorSkills Required To Become a Professional Translator
Skills Required To Become a Professional Translator
 
NYC Parking Tickets debunking 3 myths
NYC Parking Tickets debunking 3 mythsNYC Parking Tickets debunking 3 myths
NYC Parking Tickets debunking 3 myths
 
Thanks for Making That Mistake! Using Errors as an Interpreter Teaching Tool
Thanks for Making That Mistake! Using Errors as an Interpreter Teaching ToolThanks for Making That Mistake! Using Errors as an Interpreter Teaching Tool
Thanks for Making That Mistake! Using Errors as an Interpreter Teaching Tool
 
Translation and Interpretation
Translation and InterpretationTranslation and Interpretation
Translation and Interpretation
 
Types and modes of interpretation
Types and modes of interpretationTypes and modes of interpretation
Types and modes of interpretation
 
Translation vs. Interpretation
Translation vs. Interpretation Translation vs. Interpretation
Translation vs. Interpretation
 
Translation vs. Interpretation
Translation vs. Interpretation Translation vs. Interpretation
Translation vs. Interpretation
 
Methods Of Translation
Methods Of TranslationMethods Of Translation
Methods Of Translation
 
Translation Types
Translation TypesTranslation Types
Translation Types
 

Ähnlich wie Implementing a Simple Interpreter

WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...
WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...
WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...Reddyjanardhan221
 
5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptx
5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptx5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptx
5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptxvenkatapranaykumarGa
 
Finite automata-for-lexical-analysis
Finite automata-for-lexical-analysisFinite automata-for-lexical-analysis
Finite automata-for-lexical-analysisDattatray Gandhmal
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingEelco Visser
 
Speech To Sign Language Interpreter System
Speech To Sign Language Interpreter SystemSpeech To Sign Language Interpreter System
Speech To Sign Language Interpreter Systemkkkseld
 
Ll(1) Parser in Compilers
Ll(1) Parser in CompilersLl(1) Parser in Compilers
Ll(1) Parser in CompilersMahbubur Rahman
 

Ähnlich wie Implementing a Simple Interpreter (7)

lect26-em.ppt
lect26-em.pptlect26-em.ppt
lect26-em.ppt
 
WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...
WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...
WINSEM2022-23_CSI2005_TH_VL2022230504110_Reference_Material_II_22-12-2022_1.2...
 
5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptx
5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptx5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptx
5-Introduction to Parsing and Context Free Grammar-09-05-2023.pptx
 
Finite automata-for-lexical-analysis
Finite automata-for-lexical-analysisFinite automata-for-lexical-analysis
Finite automata-for-lexical-analysis
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
 
Speech To Sign Language Interpreter System
Speech To Sign Language Interpreter SystemSpeech To Sign Language Interpreter System
Speech To Sign Language Interpreter System
 
Ll(1) Parser in Compilers
Ll(1) Parser in CompilersLl(1) Parser in Compilers
Ll(1) Parser in Compilers
 

Mehr von Ray Song

C++ exception handling
C++ exception handlingC++ exception handling
C++ exception handlingRay Song
 
RISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLDRISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLDRay Song
 
gcov和clang中的实现
gcov和clang中的实现gcov和clang中的实现
gcov和clang中的实现Ray Song
 
r2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyr2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyRay Song
 
Cyber Grand Challenge及DEFCON 24 CTF决赛介绍
Cyber Grand Challenge及DEFCON 24 CTF决赛介绍Cyber Grand Challenge及DEFCON 24 CTF决赛介绍
Cyber Grand Challenge及DEFCON 24 CTF决赛介绍Ray Song
 
OI算法竞赛中树形数据结构
OI算法竞赛中树形数据结构OI算法竞赛中树形数据结构
OI算法竞赛中树形数据结构Ray Song
 
2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》Ray Song
 
8门编程语言的设计思考
8门编程语言的设计思考8门编程语言的设计思考
8门编程语言的设计思考Ray Song
 
Introduction to makefile
Introduction to makefileIntroduction to makefile
Introduction to makefileRay Song
 

Mehr von Ray Song (9)

C++ exception handling
C++ exception handlingC++ exception handling
C++ exception handling
 
RISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLDRISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLD
 
gcov和clang中的实现
gcov和clang中的实现gcov和clang中的实现
gcov和clang中的实现
 
r2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyr2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCy
 
Cyber Grand Challenge及DEFCON 24 CTF决赛介绍
Cyber Grand Challenge及DEFCON 24 CTF决赛介绍Cyber Grand Challenge及DEFCON 24 CTF决赛介绍
Cyber Grand Challenge及DEFCON 24 CTF决赛介绍
 
OI算法竞赛中树形数据结构
OI算法竞赛中树形数据结构OI算法竞赛中树形数据结构
OI算法竞赛中树形数据结构
 
2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》
 
8门编程语言的设计思考
8门编程语言的设计思考8门编程语言的设计思考
8门编程语言的设计思考
 
Introduction to makefile
Introduction to makefileIntroduction to makefile
Introduction to makefile
 

Kürzlich hochgeladen

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 

Kürzlich hochgeladen (20)

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 

Implementing a Simple Interpreter

  • 1. Implementing a Simple Interpreter Ray Song May 27, 2012 Ray Song Implementing a Simple Interpreter
  • 2. Flow sheet Lexical analysis Grammatical analysis Figure : Flow Ray Song Implementing a Simple Interpreter
  • 3. Flow sheet Lexical analysis Grammatical analysis Figure : Flow Ray Song Implementing a Simple Interpreter
  • 15. Off-side rule def hello(): print ‘world’ indentation sensitive Ex: ISWIM(1966), occam(1983), Miranda(1985), Haskell(1990), Python(1991) Ray Song Implementing a Simple Interpreter
  • 16. Off-side rule def hello(): print ‘world’ indentation sensitive Ex: ISWIM(1966), occam(1983), Miranda(1985), Haskell(1990), Python(1991) Ray Song Implementing a Simple Interpreter
  • 17. Off-side rule - Cont. represented as virtual tokens INDENT DEDENT Ray Song Implementing a Simple Interpreter
  • 18. Off-side rule - Cont. represented as virtual tokens INDENT DEDENT Ray Song Implementing a Simple Interpreter
  • 19. Off-side rule - Cont. represented as virtual tokens INDENT DEDENT Ray Song Implementing a Simple Interpreter
  • 20. Example if a > 2: print 5 print a IF a > 2 : NEWLINE INDENT PRINT 5 NEWLINE DEDENT PRINT a NEWLINE Ray Song Implementing a Simple Interpreter
  • 21. Grammatical analysis Cocke–Younger–Kasami algorithm Earley’s algorithm LR parser Recursive-descent parser Ray Song Implementing a Simple Interpreter
  • 22. Grammatical analysis Cocke–Younger–Kasami algorithm Earley’s algorithm LR parser Recursive-descent parser Ray Song Implementing a Simple Interpreter
  • 23. Grammatical analysis Cocke–Younger–Kasami algorithm Earley’s algorithm LR parser Recursive-descent parser Ray Song Implementing a Simple Interpreter
  • 24. Grammatical analysis Cocke–Younger–Kasami algorithm Earley’s algorithm LR parser Recursive-descent parser Ray Song Implementing a Simple Interpreter
  • 25. Tools Bison Can generate C, C++ and Java codes ANTLR Ray Song Implementing a Simple Interpreter
  • 26. Tools Bison Can generate C, C++ and Java codes ANTLR Ray Song Implementing a Simple Interpreter
  • 27. Tools Bison Can generate C, C++ and Java codes ANTLR Ray Song Implementing a Simple Interpreter
  • 28. Expression Precedence climbing method Shunting-yard algorithm Parsing expressions in infix notation Output in Reverse Polish notation (RPN) Output in Abstract syntax tree (AST) Operator precedence parser Ray Song Implementing a Simple Interpreter
  • 29. Expression Precedence climbing method Shunting-yard algorithm Parsing expressions in infix notation Output in Reverse Polish notation (RPN) Output in Abstract syntax tree (AST) Operator precedence parser Ray Song Implementing a Simple Interpreter
  • 30. Expression Precedence climbing method Shunting-yard algorithm Parsing expressions in infix notation Output in Reverse Polish notation (RPN) Output in Abstract syntax tree (AST) Operator precedence parser Ray Song Implementing a Simple Interpreter
  • 31. Expression Precedence climbing method Shunting-yard algorithm Parsing expressions in infix notation Output in Reverse Polish notation (RPN) Output in Abstract syntax tree (AST) Operator precedence parser Ray Song Implementing a Simple Interpreter
  • 32. Expression Precedence climbing method Shunting-yard algorithm Parsing expressions in infix notation Output in Reverse Polish notation (RPN) Output in Abstract syntax tree (AST) Operator precedence parser Ray Song Implementing a Simple Interpreter
  • 33. Expression Precedence climbing method Shunting-yard algorithm Parsing expressions in infix notation Output in Reverse Polish notation (RPN) Output in Abstract syntax tree (AST) Operator precedence parser Ray Song Implementing a Simple Interpreter
  • 34. Parser combinator Straightforward to construct Readability Parsec Ray Song Implementing a Simple Interpreter
  • 35. Parser combinator Straightforward to construct Readability Parsec Ray Song Implementing a Simple Interpreter
  • 36. Parser combinator Straightforward to construct Readability Parsec Ray Song Implementing a Simple Interpreter
  • 37. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 38. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 39. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 40. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 41. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 42. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 43. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 44. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 45. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 46. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 47. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 48. Impl Two top-level nonterminals: STMT and EXPR STMT: SIMPLE STMT ‘n’ | COMPOUND SIMPLE STMT: EXPR SIMPLE STMT: IDENT ‘=’ EXPR SIMPLE STMT: BREAK SIMPLE STMT: print EXPR COMPOUND: if EXPR ’:’ SUITE OPT ELSE COMPOUND: while EXPR ’:’ SUITE SUITE: many1(‘n’) INDENT many1(STMT) DEDENT SUITE: SIMPLE STMT ‘n’ OPT ELSE: ELSE ’:’ SUITE OPT ELSE: /* empty */ Ray Song Implementing a Simple Interpreter
  • 49. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 50. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 51. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 52. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 53. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 54. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 55. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 56. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 57. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 58. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 59. Impl - Cont. EXPR: EXPR ‘==’ TERM EXPR: EXPR ’ !=’ TERM EXPR: TERM TERM: TERM ‘+’ FACTOR TERM: FACTOR FACTOR: FACTOR ‘*’ ATOM FACTOR: ATOM ATOM: identifier ATOM: literal integer ATOM: literal string ATOM: ‘(’ EXPR ’)’ Ray Song Implementing a Simple Interpreter
  • 60. Example if a > 2: print 5 print a Ray Song Implementing a Simple Interpreter
  • 61. Example - Cont. Figure : Parse Ray Song Implementing a Simple Interpreter
  • 62. Interpreting Abstract syntax tree (AST). Define semantics for each class of nodes object(atom): trivial binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 = eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT). Object & BinOP inherit from Expr Ray Song Implementing a Simple Interpreter
  • 63. Interpreting Abstract syntax tree (AST). Define semantics for each class of nodes object(atom): trivial binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 = eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT). Object & BinOP inherit from Expr Ray Song Implementing a Simple Interpreter
  • 64. Interpreting Abstract syntax tree (AST). Define semantics for each class of nodes object(atom): trivial binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 = eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT). Object & BinOP inherit from Expr Ray Song Implementing a Simple Interpreter
  • 65. Interpreting Abstract syntax tree (AST). Define semantics for each class of nodes object(atom): trivial binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 = eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT). Object & BinOP inherit from Expr Ray Song Implementing a Simple Interpreter
  • 66. Interpreting Abstract syntax tree (AST). Define semantics for each class of nodes object(atom): trivial binary operator BinOP(operator, lhs, rhs, RESULT) :- obj1 = eval(lhs), obj2 = eval(rhs), calc(op, obj1, obj2, RESULT). Object & BinOP inherit from Expr Ray Song Implementing a Simple Interpreter
  • 67. Subclasses of Stmt - Cont. Assign eval() need a parameter: Binding (which variable holds which object) ExprStmt Print Continue (throwing an exception) Ray Song Implementing a Simple Interpreter
  • 68. Subclasses of Stmt - Cont. Assign eval() need a parameter: Binding (which variable holds which object) ExprStmt Print Continue (throwing an exception) Ray Song Implementing a Simple Interpreter
  • 69. Subclasses of Stmt - Cont. Assign eval() need a parameter: Binding (which variable holds which object) ExprStmt Print Continue (throwing an exception) Ray Song Implementing a Simple Interpreter
  • 70. Subclasses of Stmt - Cont. Assign eval() need a parameter: Binding (which variable holds which object) ExprStmt Print Continue (throwing an exception) Ray Song Implementing a Simple Interpreter
  • 71. Subclasses of Stmt - Cont. Assign eval() need a parameter: Binding (which variable holds which object) ExprStmt Print Continue (throwing an exception) Ray Song Implementing a Simple Interpreter