|
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.