Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lexical Analysis (Sections )

Similar presentations


Presentation on theme: "Lexical Analysis (Sections )"— Presentation transcript:

1 Lexical Analysis (Sections 2.1.2-2.1.3)
CSCI 431 Programming Languages Fall 2003 Lexical Analysis (Sections ) A modification of slides developed by Felix Hernandez-Campos at UNC Chapel Hill

2 Phases of Compilation

3 Specification of Programming Languages
PLs require precise definitions (i.e. no ambiguity) Language form (Syntax) Language meaning (Semantics) Consequently, PLs are specified using formal notation: Formal syntax Tokens Grammar Formal semantics

4 Phases of Compilation

5 Scanner Main task: identify tokens
Basic building blocks of programs E.g. keywords, identifiers, numbers, punctuation marks Other tasks: remove comments, deal with pragmas, save source locations Desk calculator language example: read A sum := A e-3 write sum write sum / 2 Makes parsing much easier (the parsers looks for relations between tokens) Other tasks: remove comments

6 Formal definition of tokens
A set of tokens is a set of strings over an alphabet {read, write, +, -, *, /, :=, 1, 2, …, 10, …, 3.45e-3, …} A set of tokens is a regular set that can be defined by comprehension using a regular expression For every regular set, there is a deterministic finite automaton (DFA) that can recognize it i.e. determine whether a string belongs to the set or not Scanners extract tokens from source code in the same way DFAs determine membership

7 Regular Expressions A regular expression (RE) is: A single character
The empty string,  The concatenation of two regular expressions Notation: RE1 RE2 (i.e. RE1 followed by RE2) The union of two regular expressions Notation: RE1 | RE2 The closure of a regular expression Notation: RE* * is known as the Kleene star * represents the concatenation of 0 or more strings

8 Token Definition Example
Numeric literals in Pascal Definition of the token unsigned_number digit  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 unsigned_integer  digit digit* unsigned_number  unsigned_integer ( ( . unsigned_integer ) |  ) ( ( e ( + | – | ) unsigned_integer ) |  ) Recursion is not allowed! Notice the use of parentheses to avoid ambiguity

9 Scanning Pascal scanner Pseudo-code
Accept the longest possible token (keyword while, p. 5) One character at a time (but we may need look ahead e.g. dotdot for Pascal’s subranges)

10 DFAs Scanners are deterministic finite automata (DFAs) With some hacks
Simplified (keywords and identifiers) Lookup problems (but we may need look ahead e.g. dotdot for Pascal’s subranges)

11 Difficulties Keywords and variable names Look-ahead
Pascal’s ranges [1..10] FORTRAN’s example DO 5 I=1,25 => Loop 25 times up to label 5 DO 5 I= => Assign 1.25 to DO5I NASA’s Mariner 1 (apocryphal?) Pragmas: significant comments Compiler options Run-time check (array out of bounds) Code improvements Profiling Hints for the compiler

12 Outline of the Scanner

13 Scanner Generators Scanners generators: E.g. lex, flex
These programs take regular expressions as their input and return a program (i.e. a scanner) that can extract tokens from a stream of characters Automatic generation of scanners

14 Table-driven scanner Lexical errors

15 Scanners and String Processing
Scanning is a common task in programming String processing E.g. reading configuration files, processing log files,… StringTokenizer and StreamTokenizer in Java Regular expressions in Perl and other scripting languages


Download ppt "Lexical Analysis (Sections )"

Similar presentations


Ads by Google