SlideShare uma empresa Scribd logo
1 de 71
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

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
 

Destaque (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
 

Semelhante a 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
 

Semelhante a 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
 

Mais de 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
 

Mais de 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
 

Último

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 

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