9/18/20151 programming languages and compilers (cs 421) elsa l gunter 2112 sc, uiuc based in part...
TRANSCRIPT
![Page 1: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/1.jpg)
04/19/23 1
Programming Languages and Compilers (CS 421)
Elsa L Gunter
2112 SC, UIUC
http://courses.engr.illinois.edu/cs421
Based in part on slides by Mattox Beckman, as updated by Vikram Adve and Gul Agha
![Page 2: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/2.jpg)
04/19/23 2
Background for Unification
Terms made from constructors and variables (for the simple first order case)
Constructors may be applied to arguments (other terms) to make new terms
Variables and constructors with no arguments are base cases
Constructors applied to different number of arguments (arity) considered different
Substitution of terms for variables
![Page 3: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/3.jpg)
04/19/23 3
Simple Implementation Background
type term = Variable of string | Const of (string * term list)
let rec subst var_name residue term = match term with Variable name -> if var_name = name then residue else
term | Const (c, tys) -> Const (c, List.map (subst var_name
residue) tys);;
![Page 4: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/4.jpg)
04/19/23 4
Unification Problem
Given a set of pairs of terms (“equations”){(s1, t1), (s2, t2), …, (sn, tn)}
(the unification problem) does there exist a substitution (the unification solution)of terms for variables such that
(si) = (ti),
for all i = 1, …, n?
![Page 5: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/5.jpg)
04/19/23 5
Uses for Unification
Type Inference and type checking Pattern matching as in OCAML
Can use a simplified version of algorithm
Logic Programming - Prolog Simple parsing
![Page 6: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/6.jpg)
04/19/23 6
Unification Algorithm
Let S = {(s1= t1), (s2= t2), …, (sn= tn)} be a unification problem.
Case S = { }: Unif(S) = Identity function (i.e., no substitution)
Case S = {(s, t)} S’: Four main steps
![Page 7: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/7.jpg)
04/19/23 7
Unification Algorithm
Delete: if s = t (they are the same term) then Unif(S) = Unif(S’)
Decompose: if s = f(q1, … , qm) and t =f(r1, … , rm) (same f, same m!), then
Unif(S) = Unif({(q1, r1), …, (qm, rm)} S’) Orient: if t = x is a variable, and s is not a
variable, Unif(S) = Unif ({(x = s)} S’)
![Page 8: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/8.jpg)
04/19/23 8
Unification Algorithm
Eliminate: if s = x is a variable, and x does not occur in t (the occurs check), then Let = {x t} Let = Unif((S’)) Unif(S) = {x (t)} o
Note: {x a} o {y b} = {y ({x a}(b))} o {x a} if y not in a
![Page 9: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/9.jpg)
04/19/23 9
Tricks for Efficient Unification
Don’t return substitution, rather do it incrementally
Make substitution be constant time Requires implementation of terms to
use mutable structures (or possibly lazy structures)
We won’t discuss these
![Page 10: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/10.jpg)
04/19/23 10
Example
x,y,z variables, f,g constructors
Unify {(f(x) = f(g(f(z),y))), (g(y,y) = x)} = ?
![Page 11: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/11.jpg)
04/19/23 11
Example
x,y,z variables, f,g constructors S = {(f(x) = f(g(f(z),y))), (g(y,y) = x)}
is nonempty
Unify {(f(x) = f(g(f(z),y))), (g(y,y) = x)} = ?
![Page 12: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/12.jpg)
04/19/23 12
Example
x,y,z variables, f,g constructors Pick a pair: (g(y,y) = x)
Unify {(f(x) = f(g(f(z),y))), (g(y,y) = x)} = ?
![Page 13: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/13.jpg)
04/19/23 13
Example
x,y,z variables, f,g constructors Pick a pair: (g(y,y)) = x) Orient: (x = g(y,y))
Unify {(f(x) = f(g(f(z),y))), (g(y,y) = x)} =
Unify {(f(x) = f(g(f(z),y))), (x = g(y,y))}
by Orient
![Page 14: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/14.jpg)
04/19/23 14
Example
x,y,z variables, f,g constructors
Unify {(f(x) = f(g(f(z),y))), (x = g(y,y))} = ?
![Page 15: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/15.jpg)
04/19/23 15
Example
x,y,z variables, f,g constructors {(f(x) = f(g(f(z),y))), (x = g(y,y))} is
non-empty
Unify {(f(x) = f(g(f(z),y))), (x = g(y,y))} = ?
![Page 16: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/16.jpg)
04/19/23 16
Example
x,y,z variables, f,g constructors Pick a pair: (x = g(y,y))
Unify {(f(x) = f(g(f(z),y))), (x = g(y,y))} = ?
![Page 17: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/17.jpg)
04/19/23 17
Example
x,y,z variables, f,g constructors Pick a pair: (x = g(y,y)) Eliminate x with substitution {x
g(y,y)} Check: x not in g(y,y) .
Unify {(f(x) = f(g(f(z),y))), (x = g(y,y))} = ?
![Page 18: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/18.jpg)
04/19/23 18
Example
x,y,z variables, f,g constructors Pick a pair: (x = g(y,y)) Eliminate x with substitution {x
g(y,y)}
Unify {(f(x) = f(g(f(z),y))), (x = g(y,y))} =
Unify {(f(g(y,y)) = f(g(f(z),y)))} o {x g(y,y)}
![Page 19: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/19.jpg)
04/19/23 19
Example
x,y,z variables, f,g constructors
Unify {(f(g(y,y)) = f(g(f(z),y)))} o {x g(y,y)} = ?
![Page 20: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/20.jpg)
04/19/23 20
Example
x,y,z variables, f,g constructors {(f(g(y,y)) = f(g(f(z),y)))} is non-empty
Unify {(f(g(y,y)) = f(g(f(z),y)))} o {x g(y,y)} = ?
![Page 21: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/21.jpg)
04/19/23 21
Example
x,y,z variables, f,g constructors Pick a pair: (f(g(y,y)) = f(g(f(z),y)))
Unify {(f(g(y,y)) = f(g(f(z),y)))} o {x g(y,y)} = ?
![Page 22: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/22.jpg)
04/19/23 22
Example
x,y,z variables, f,g constructors Pick a pair: (f(g(y,y)) = f(g(f(z),y))) Decompose:(f(g(y,y)) = f(g(f(z),y)))
becomes {(g(y,y) = g(f(z),y))}
Unify {(f(g(y,y)) = f(g(f(z),y)))} o {x g(y,y)} = Unify {(g(y,y) = g(f(z),y))} o {x
g(y,y)}
![Page 23: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/23.jpg)
04/19/23 23
Example
x,y,z variables, f,g constructors {(g(y,y) = g(f(z),y))} is non-empty
Unify {(g(y,y) = g(f(z),y))} o {x g(y,y)} = ?
![Page 24: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/24.jpg)
04/19/23 24
Example
x,y,z variables, f,g constructors Pick a pair: (g(y,y) = g(f(z),y))
Unify {(g(y,y) = g(f(z),y))} o {x g(y,y)} = ?
![Page 25: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/25.jpg)
04/19/23 25
Example
x,y,z variables, f,g constructors Pick a pair: (f(g(y,y)) = f(g(f(z),y))) Decompose: (g(y,y)) = g(f(z),y))
becomes {(y = f(z)); (y = y)}
Unify {(g(y,y) = g(f(z),y))} o {x g(y,y)} =
Unify {(y = f(z)); (y = y)} o {x g(y,y)}
![Page 26: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/26.jpg)
04/19/23 26
Example
x,y,z variables, f,g constructors
Unify {(y = f(z)); (y = y)} o {x g(y,y)} = ?
![Page 27: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/27.jpg)
04/19/23 27
Example
x,y,z variables, f,g constructors {(y = f(z)); (y = y)} o {x g(y,y) is
non-empty
Unify {(y = f(z)); (y = y)} o {x g(y,y)} = ?
![Page 28: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/28.jpg)
04/19/23 28
Example
x,y,z variables, f,g constructors Pick a pair: (y = f(z))
Unify {(y = f(z)); (y = y)} o {x g(y,y)} = ?
![Page 29: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/29.jpg)
04/19/23 29
Example
x,y,z variables, f,g constructors Pick a pair: (y = f(z)) Eliminate y with {y f(z)}
Unify {(y = f(z)); (y = y)} o {x g(y,y)} = Unify {(f(z) = f(z))}
o {y f(z)} o {x g(y,y)}= Unify {(f(z) = f(z))} o {y f(z); x g(f(z), f(z))}
![Page 30: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/30.jpg)
04/19/23 30
Example
x,y,z variables, f,g constructors
Unify {(f(z) = f(z))} o {y f(z); x g(f(z), f(z))} = ?
![Page 31: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/31.jpg)
04/19/23 31
Example
x,y,z variables, f,g constructors {(f(z) = f(z))} is non-empty
Unify {(f(z) = f(z))} o {y f(z); x g(f(z), f(z))} = ?
![Page 32: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/32.jpg)
04/19/23 32
Example
x,y,z variables, f,g constructors Pick a pair: (f(z) = f(z))
Unify {(f(z) = f(z))} o {y f(z); x g(f(z), f(z))} = ?
![Page 33: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/33.jpg)
04/19/23 33
Example
x,y,z variables, f,g constructors Pick a pair: (f(z) = f(z)) Delete Unify {(f(z) = f(z))} o {y f(z); x g(f(z), f(z))} = Unify {} o {y f(z); x g(f(z), f(z))}
![Page 34: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/34.jpg)
04/19/23 34
Example
x,y,z variables, f,g constructors
Unify {} o {y f(z); x g(f(z), f(z))} = ?
![Page 35: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/35.jpg)
04/19/23 35
Example
x,y,z variables, f,g constructors {} is empty Unify {} = identity function Unify {} o {y f(z); x g(f(z), f(z))} =
{y f(z); x g(f(z), f(z))}
![Page 36: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/36.jpg)
04/19/23 36
Example
Unify {(f(x) = f(g(f(z),y))), (g(y,y) = x)} = {y f(z); x g(f(z), f(z))}
f( x ) = f(g(f(z), y )) f(g(f(z), f(z))) = f(g(f(z), f(z))) .
g( y , y ) = x . g(f(z),f(z)) = g(f(z), f(z)) .
![Page 37: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/37.jpg)
04/19/23 37
Example of Failure: Decompose
Unify{(f(x,g(y)) = f(h(y),x))} Decompose: (f(x,g(y)) = f(h(y),x)) = Unify {(x = h(y)), (g(y) = x)} Orient: (g(y) = x) = Unify {(x = h(y)), (x = g(y))} Eliminate: (x = h(y)) Unify {(h(y), g(y))} o {x h(y)} No rule to apply! Decompose fails!
![Page 38: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/38.jpg)
04/19/23 38
Example of Failure: Occurs Check
Unify{(f(x,g(x)) = f(h(x),x))} Decompose: (f(x,g(x)) = f(h(x),x)) = Unify {(x = h(x)), (g(x) = x)} Orient: (g(y) = x) = Unify {(x = h(x)), (x = g(x))} No rules apply.
![Page 39: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/39.jpg)
Major Phases of a Compiler
Source ProgramLex
TokensParse
Abstract SyntaxSemanticAnalysis
Symbol TableTranslate
IntermediateRepresentation
Modified from “Modern Compiler Implementation in ML”, by Andrew Appel
InstructionSelection
Optimized Machine-SpecificAssembly Language
Optimize
Unoptimized Machine-Specific Assembly Language
Emit code
Assembler
Relocatable Object Code
Assembly Language
Linker
MachineCode
Optimize
Optimized IR
![Page 40: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/40.jpg)
04/19/23 40
Meta-discourse
Language Syntax and Semantics Syntax - Regular Expressions, DFSAs and
NDFSAs - Grammars Semantics - Natural Semantics - Transition Semantics
![Page 41: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/41.jpg)
04/19/23 41
Language Syntax
Syntax is the description of which strings of symbols are meaningful expressions in a language
It takes more than syntax to understand a language; need meaning (semantics) too
Syntax is the entry point
![Page 42: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/42.jpg)
04/19/23 42
Syntax of English Language
Pattern 1
Pattern 2
![Page 43: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/43.jpg)
04/19/23 43
Elements of Syntax
Character set – previously always ASCII, now often 64 character sets
Keywords – usually reserved Special constants – cannot be assigned to Identifiers – can be assigned to Operator symbols Delimiters (parenthesis, braces, brackets) Blanks (aka white space)
![Page 44: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/44.jpg)
04/19/23 44
Elements of Syntax
Expressions if ... then begin ... ; ... end else begin ... ; ...
end Type expressions typexpr1 -> typexpr2 Declarations (in functional languages) let pattern1 = expr1 in expr Statements (in imperative languages) a = b + c Subprograms let pattern1 = let rec inner = … in expr
![Page 45: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/45.jpg)
04/19/23 45
Elements of Syntax
Modules Interfaces Classes (for object-oriented
languages)
![Page 46: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/46.jpg)
04/19/23 46
Lexing and Parsing
Converting strings to abstract syntax trees done in two phases Lexing: Converting string (or streams
of characters) into lists (or streams) of tokens (the “words” of the language)
Specification Technique: Regular Expressions
Parsing: Convert a list of tokens into an abstract syntax tree
Specification Technique: BNF Grammars
![Page 47: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/47.jpg)
04/19/23 47
Formal Language Descriptions
Regular expressions, regular grammars, finite state automata
Context-free grammars, BNF grammars, syntax diagrams
Whole family more of grammars and automata – covered in automata theory
![Page 48: 9/18/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox](https://reader036.vdocuments.site/reader036/viewer/2022062421/56649e585503460f94b52379/html5/thumbnails/48.jpg)
04/19/23 48
Grammars
Grammars are formal descriptions of which strings over a given character set are in a particular language
Language designers write grammar Language implementers use grammar
to know what programs to accept Language users use grammar to know
how to write legitimate programs