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')
|