WRITING A SCANNER COP 4620 Programming Language Translators

  • Slides: 6
Download presentation
WRITING A SCANNER COP 4620 – Programming Language Translators Dr. Manuel E. Bermudez

WRITING A SCANNER COP 4620 – Programming Language Translators Dr. Manuel E. Bermudez

TOPICS Writing a scanner using DFA in table form. Writing a hard-coded scanner. Writing

TOPICS Writing a scanner using DFA in table form. Writing a hard-coded scanner. Writing a scanner for real, i. e. for a programming language.

WRITING A SCANNER Table-driven Scanner: ST 21 3 22 4 23 3 24 5

WRITING A SCANNER Table-driven Scanner: ST 21 3 22 4 23 3 24 5 25 3 a b a a b 2 1 Token scan() { a Token t=empty(); b S=1; 3 while S not in [5] && c ≠ null { b if ST[S, c] = “_” { Error(c); c=getchar(); continue; } else {S=ST[S, c]; t=t+c; c=getchar(); } } return t; 4 a b b a 5

WRITING A SCANNER a a 1 b 2 4 a a b b 3

WRITING A SCANNER a a 1 b 2 4 a a b b 3 b a 5 b Hard-coded Scanner: Token scan() { Token t=empty(); S=1; while S not in [5] && c ≠ null { case S of 1: case c of a: S=2; b: S=3; end; 2: case c of b: S=4; end; 3: case c of a: S=2; end; 4: case c of a: S=2; b: S=5; end; 5: case c of a: S=2; b: S=3; end; t=t+c; c=getchar(); }

WRITING A SCANNER (FOR REAL, I. E. PL’S) L L+D+_ Id S D ℇ

WRITING A SCANNER (FOR REAL, I. E. PL’S) L L+D+_ Id S D ℇ <id> ℇ <int> D Int No DFA. Attempt alternatives “in order”. Each symbol from S goes into a sub-FSA. Must hard-code. any+eol 〳 * any 〳 = ℇ 〳 * ℇ eol <Punc: /=> <Punc: /> <comm>

SUMMARY Writing a scanner using DFA in table form. Writing a hard-coded scanner. Writing

SUMMARY Writing a scanner using DFA in table form. Writing a hard-coded scanner. Writing a scanner for real, i. e. for a programming language Attempt alternatives in order.