|
| Postscript, PDF | Didier Rémy | Polytechnique, INRIA |
|

|
|
| · | d'expliquer le fonctionnement des analyseurs de façon à pouvoir écrire soi-même des analyseurs lexicaux ou grammaticaux. |
| · | de se familiariser aussi avec les expressions régulières et les automates, car on les retrouve ensuite fréquemment en informatique. |
|
|
|
| · | Une lettre de l'alphabet a désigne le langage {a}. |
| · | Epsilon: e désigne le langage {e}. |
| · | Concaténation: M · N désigne le langage [[M]] [[N]]. |
| · | Alternative: M | N désigne le langage [[M]] È [[N]]. |
| · | Répétition: M* désigne le langage [[M]] *. |
| · | [abc] pour (a | b | c) et [a1-a2] pour {c Î S, a1 £ c Ù c £ a2}, (on suppose ici que l'alphabet est ordonné) |
| · | M? pour M | e et M+ pour M M*. |
|
"let", "in"
['a'-'z']+ ['0'-'9']*
['0'-'9']+
'(', ')', '+', '*', '='
(' ' | '\n')
|
type token = LET | IN | .. (* mots clés *) | VAR of string (* variables *) | INT of int (* entiers *) | LPAREN | RPAREN | PLUS | TIMES | EQUAL (* symboles *) |
|
| · | prend une suite de caractère |
| · | la transforme en une suite de lexème, et retourne les caractères non reconnus. |
| · | let pourrait être reconnu comme une variable.
|
| · | lettre pourrait aussi être reconnu comme la séquence
LET; VAR "tre" ou encore
VAR "let"; VAR "tre"
|
|
let lettre = 3 in 1 + fin produit la suite de
lexèmes:
LET; VAR "lettre"; EQUAL; IN; INT 1; PLUS; VAR "fin"
|
Lexing.lexeme lexbuf. Attention: le nom de la variable
lexbuf est fixé par convention.
|
|
|
|
|
ocamllex essai.mll |
|
ocamlc -c essai.ml |
|
token lexbuf pour une production vide.
|
|
| · | La position du dernier lexème dans le flux d'entrée est déterminée par
Lexing.lexeme_start lexbuf et Lexing.lexeme_end lexbuf.
|
| · | La sous-chaîne correspondante est (Lexing.lexeme lexbuf).
|
|
|
| · | S est un alphabet; |
| · | Q est un ensemble fini d'états; |
| · | d : Q × S ® Q est la fonction (partielle) de transition; |
| · | q0 est l'état initial; |
| · | F est un ensemble d'états finaux. |
|
ì í î |
|
|

| · | S = {a,b} |
| · | Q = {q0, q1, q2, q3, F} |
| · | d = {(q0, a) |® q1, (q0, b) |® q2, (q1, a) |® q3, (q2, b) |® q3, (q3, b) |® F} |
| · | État initial q0 et un seul état final F. |
|
|
ì ï í ï î |
|
|
| · | [[a]] = ({s, f}, {s |®a f}, s, {f}) |
| · | [[e]]= ({s, f}, {s |®ef}, s, {f}) |
| · | [[M | M']] = (Q È Q' È {s''}, d È d' È { s'' |®es, s'' |®es' }, s'', F È F') |
| · | [[M · M']] = (Q È Q', d È d' È {f |®es', f Î F}, s, F') |
| · | [[M*]] = (Q, d È {f |®es, f Î F}, s, {s}) |
|


|
| d' (q', a) = fermeture | ( |
|
d (q, a)) |
|
| " q Î Q, " w Î S *, |
ì í î |
|
|
|


|

|
|
|
a et b. Par convention, l'état
initial est 0. Dans la table -1 représente une transition interdite.
|
|
|
|
|
| Q =def | Èi Î I Qi È q0 È {pi, i Î I} |
| d =def | Èi Î I di È {q0 |®eqi | i Î I} È {q |®pi qF | q Î Fi, i Î I} |
|
type état = int (* on numérote les règles *) type rule = int (* on numérote les états *) type automat= { final : rule option array; delta : état array array; };; |
|
|
|
|
|
|
|
|
|
| · | Les blancs (blanc, tabulation, retour à la ligne) | ||||||
| · | Les mots clés:
{}
var, alloc, false, true, read, write
, writeln, array, of, do, begin ,
end, if, then, else, while, type ,
function, procedure, integer, boolean, program.
· | les entiers
| · | les identificateurs (composés de caractères alphabétiques (mininuscule ou
majuscules et terminant éventellement par des chiffres.
| · | les lexèmes:
| ;; := <> <= >= < >
; ~ : = - + *
/ ( ) [ ].
|
| En travaux dirigé, suivre l'énoncé détaillé de Luc Maranget. |
< et >).
On pourra considérer que ces caractères n'apparaissent nulle part ailleurs.
A. | · | Les chaînes ne contiennent pas la clé href.
|
| · | Les chaînes ne contiennent pas le caractère '"'.
|
IMG. | · | en utilisant un lexeur, |
| · | en utilisant la librairie des str des expressions régulières. |
This document was translated from LATEX by HEVEA and HACHA.