prototype d'examen à distance 2020

Ce formulaire est non obligatoire, rien n'est enregistré, il n'y a pas de temps limité et vous pouvez le faire autant de fois que vous voulez.
L'examen, lui, sera obligatoire, enregistré (il faut bien que je vous corrige...), il y aura un temps limité (seule la dernière soumission comptera et il y aura un malus si on dépasse le temps) et la première connexion lancera le chronomètre (vous pouvez vous reconnecter mais vous aurez le même questionnaire et le même chronomètre).

Cours

(1pt) MiniJS est :

(1pt) CstRe est :

(1pt) SubsRe :

(1pt) LR0 est :

(1pt) (_?_:_) :

(1pt) Le frontend :

(2pt) Trouvez l'expression régulière définissant au mieux les instructions de la machine abstraite du cours (avec arguments)

(1pt, difficile) L'expression régulière
((['a'-'z']+'@')?['a'-'z']+('.'['a'-'z']+)+':')?['a'-'z','.']*('/'['a'-'z','.']+)*
définie une sous ensemble :

Lexeur

On considère le lexeur généré par les expressions régulières suivantes
Entier : ['0'-'9']+
Flottant : ['0'-'9']*'.'['0'-'9']+
Ident : ['a'-'z']['a'-'z','0'-'9']*
(2pt) Celui-ci présente conflits shift-actions conflits action-actions.
(1pt) Si j'écris "25." le lexeur résultant

Parseur

On considère le parseur non déterministe généré par la grammaire suivante
<sql> ::= set <list> where <contr>
<list> ::= * | <ID> | <ID>,list
<contr> ::= <expr> = <expr> | <contr> and <contr> | <ID> in <sql>
<expr> ::= <ID> | <INT>
où "set", "where", '*', ',', '=', "and", "in", <ID> et <INT> sont tous des tokens
(2pt) Celui-ci présente conflits shift-reduce conflits reduce-reduces.
(1pt) La grammaire est
(1pt) pour régler ce problème on peut ajouter l'associativité gauche de (1pt) ainsi que la priorité de

(1pt) avec ça la grammaire est (cocher le plus précis):

Machine abstraite

Voici un code assembleur :
CstStr "foo"
SetVar x
CstStr "bar"
GetVar x
CstStr x
Concat
Concat
SetVar x
(1pt) Ceci est le code assemblé de

Question ouverte

Vous utilisez un lexeur généré par les expressions régulières suivantes
entier : ['0'-'9']*+
Flottant : ['0'-'9']*'.'['0'-'9']+
Ident : ['a'-'z']['a'-'z','0'-'9']*
separateurs : [' ', \t, \n, ',', ';']*
telephones : ['0'-'9','.']*+'#'
(1pt, difficile) Lorsque vous faites des essais sur des gros fichiers aléatoires (plusieurs mégas), vous vous retrouvez avec votre programme qui a l'air de boucler.
Que s'est-il passé ?