[CSUSB] >> [CompSci] >> /pool/faculty/dick/cs320/sebesta/04

Sebesta Chapter 4 -- Compilation



	4.1 Introduction
	4.2 Lexical Analysis
	4.3 The Parsing Problem

	4.4 Recursive-Descent Parsing
	4.5 Bottom-Up Parsing

	Revision Exercises


	Reasons for splitting lexical analysis from parsing

Lexical Analysis

	A stream of characters is input and
		a stream of tokens come out
	pattern recognition
	regular expressions
	State Diagrams
	UNIX tool: lex

The Parsing Problem

	Recognise syntactice units and
		construct data structures that encodes the incoming program.
			Container of names (easier)
			Syntax tree(tougher)

	Too approaches

	->wise person uses a tool.
		Tools: yacc, bison, ...

Recursive Descent Parsing

Skip but
	Notice how very easy it is to turn most grammars into a
		program that parses the incoming data.  If you can
		write the EBNF for something you have the structure
		of a program to process the data.
	Here is the simplest coding:
	A::= ...		void A() { .... }
	 ... #A ...		while(an_A_is_next()) A();
	 ....A | B ....		if(an_A_is_next()) A(); else B();

	Unless the grammar has left recursion like this
		A ::= A "+" B | C.
	the mapping works well.
	But you can replace these definitions by a routine transformation.
	In the above case we have:
		A ::= C #("+" B).

Bottom-Up Parsing


Revision Exercises

Do not attempt any exercises after number 8!