Le rôle de l'analyse syntaxique est de
En pratique, d'autres taches sont réalisées simultanément à l'analyse syntaxique:
La plupart des méthodes d'analyse syntaxique tombent dans l'une ou l'autre de deux catégories :
Dans la suite, nous utiliserons les différences entre ces deux méthodes avec l'exemple des expressions arithmétiques. Le langage des expressions arithmétiques peut être décrit par la grammaire suivante G0 :
E -> E+T | T T -> T*F | F F -> id | (E)
où | indique “ou”. Par convention, les lettres majuscules (E,F,T) sont des non-terminaux, et les autres symboles ( ) id * + sont des terminaux (ici, des tokens).
Nous analyserons la chaîne ( id + id ) * id.
A chaque étape, on sélectionne une règle qui permet de dériver le reste de la suite des tokens. On peut éventuellement d'être trompé et avoir choisi une mauvaise règle; dans ce cas, on fait un retour en arrière et on essaie une autre règle.
E
| R1
T
/ | \ R2
T * F
| | R2 R3
F id
/ | \ R3
( E )
/ | \ R1
E + T
| | R1, R2
T F
| | R2, R3
F id
| R3
id
Mais la méthode n'aurait pas construit les deux branches simultanément, elle travaille d'abord à gauche:
Eg ⇒ T ⇒g T * F ⇒g F * F ⇒g ( E ) * F ⇒g ( E + T ) * F
⇒g ( T + T ) * F ⇒g( F + T ) * F ⇒g ( id + T ) * F
⇒g ( id + F ) * F ⇒g( id + id ) * F
⇒g ( id + id ) * id
On sélectionne une partie du début de la chaîne qui dérive d'un non-terminal et on remplace par ce non-terminal. La suite des règles utilisées correspond à une dérivation droite de la chaîne.
( id + id ) * id
| | 1:R3 | | 4:R3 | | |
| F | F | | |
| | 2:R2 | | 5:R2 | | |
| T | T | | | 9:R3
| | 3:R1 | | | | |
\ E | | / | |
\ \ | / / | |
\ \ | / / | |
\ \ | / / | |
\ \ | / / | |
\ E 6:R1 | |
\ | / | |
\ | / | |
\ | / | |
\ | / | |
\ | / | |
F 7:R3 | F
| | |
8:R2 T | /
\ / /
\ / /
\ / /
\ / /
\ / /
\ / /
T 10:R2
|
E 11:R1
<= précédent cours -/- cours suivant => Analyse Descendante