|
BNF defines the syntax of a high level
language using these symbols -
| ::= |
'is defined by' |
| | |
'OR' |
| < > |
define a meta
variable |
Example definition:
| <hexdigit> |
::= |
0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F |
One definition can then be used as part of
another...
| <hexnumber> |
::= |
<hexdigit>
| <hexdigit>
<hexnumber> |
This is an example of a recursive definition - one where the definition uses the
thing being defined (!)
Example
| 1 |
<digit> |
::= |
0|1|2|3|4|5|6|7|8|9 |
| 2 |
<letter> |
::= |
A|B|C|D|E|......|X|Y|Z |
| 3 |
<integer> |
::= |
<digit>
| <digit>
<integer> |
| 4 |
<word> |
::= |
<letter>
| <letter>
<word> |
| 5 |
<variable> |
::= |
<letter>
| <letter>
<integer> |
| 6 |
<relation> |
::= |
< | > | = |
| 7 |
<condition> |
::= |
<variable>
<relation> <integer> |
Which are the recursive
definitions ?
Parsing is testing whether the rules of syntax have been
obeyed.
Example of parsing (using the above definitions)
Test if 'B8>145'
is a valid 'condition'.
| Rules used: |
condition |
| 7 |
variable |
relation |
integer |
| 5,3 |
letter |
integer |
|
digit
|
integer |
| 3 |
|
|
|
|
digit |
integer |
| 3 |
|
|
|
|
|
digit |
| 2,1,6 |
B |
8 |
> |
1 |
4 |
5 |
This parse tree
shows that 'B8>145' is a valid 'condition'.
Part of the task of a compiler is to check the syntax of every statement in a high
level language program. (The second stage of compilation is 'Syntax Analysis')
|