Principles of top-down parsing

(下向き構文解析の実装)

8th lecture, June 7, 2019

Language Theory and Compilers

http://www.sw.it.aoyama.ac.jp/2019/Compiler/lecture8.html

Martin J. Dürst

AGU

© 2005-19 Martin J. Dürst 青山学院大学

Today's Schedule

 

Leftovers from Last Lecture

 

Summary of Last Lecture

 

Comment about Grammars Collected Last Week

 

Last Week's Homework 1

都合により削除

 

Last Week's Homework 2

都合により削除

 

Last Week's Homework 3

都合により削除

 

About Ambiguous Grammars

 

General Top-Down Parsing

 

Main Points of Backtracking

Backtracking tries all possible pathways (similar to finding exit in a labyrinth without map)

Backtracking may be very slow, but this can be improved:

 

Recursive Descent Parsing

 

Recursive Descent Parsing: Simple Hand-Written Parser

Program files: scanner.h, scanner.c, parser1.c

How to complie: gcc scanner.c parser.c && ./a

 

Details of Recursive Descent Parsing: Lexical Analysis

(see scanner.c)

 

Details of Recursive Descent Parsing: Parsing

(see parser1.c)

 

Details of Recursive Descent Parsing: Non-Terminal Symbols

 

How to Deal with Left Recursion

Example of left recursion:

E → E '-' integer | integer

Wrong solution (change of associativity):

E → integer '-' E | integer

Correct solution:

E → integer Econtinued

Econtinued → '-' integer Econtinued | ε

In (E)BNF:

E → integer {'-' integer}

 

Differences between Grammars and Regular Expressions

Grammar:

Regular Expression:

A simple regular expression corresponds to a single rewriting rule in an (BNF,...) grammar

 

Homework

Deadline: June 21, 2017 (Thursday) June 13, 2019 (Thursday), 19:00

Where to submit: Box in front of room O-529 (building O, 5th floor)

Format: A4 double-sided printout of parser program. Stapled in upper left if more than one page, no cover page, no wrapping lines, legible font size, non-proportional font, portrait (not landscape), formatted (indents,...) for easy visibility, name (kanji and kana) and student number as a comment at the top

Collaboration: The same rules as for Computer Practice I (計算機実習 I) apply

  1. Expand the top-down parser of parser1.c to correctly deal with the four basic arithmetic operations.
    (scanner.h/c do not change, so no need to submit them)
  2. (bonus problem) Add more operations to the top-down parser, and/or deal with parentheses.
    (If you solve this problem, also submit the scanner.h/c files, but only one parser.c file for both problems.)
  3. Bring your notebook computer to the next lecture. Check again that flex, bison, make, and gcc are installed.

 

Glossary

ambiguous grammar
曖昧な文法
recursive descent parsing
再帰的下向き構文解析
depth-first
深さ優先
lookahead
先読み
backtracking
バックトラック
labyrinth
迷路
right associative
右結合
invariant
不変条件
left recursion
左再帰