La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Faculté I&C, Claude Petitpierre, André Maurer JavaCC Java compilers compiler (version générant du Javascript)

Présentations similaires


Présentation au sujet: "Faculté I&C, Claude Petitpierre, André Maurer JavaCC Java compilers compiler (version générant du Javascript)"— Transcription de la présentation:

1 Faculté I&C, Claude Petitpierre, André Maurer JavaCC Java compilers compiler (version générant du Javascript)

2 Faculté I&C, Claude Petitpierre, André Maurer JavaCC (zones de la source) 1.Options 2.Program header 3.Tokens 4.Productions

3 Faculté I&C, Claude Petitpierre, André Maurer options { STATIC = true; } PARSER_BEGIN(ExpressionCompiler) // Header class ExpressionCompiler{ var variables = new Array(); // Javascript == Java var varMap = new Array(); function keepVarName(name) { // code auxiliaire if (varMap[name] == undefined) { // si nécessaire varMap[name] = true; variables.push(name); } } } PARSER_END(ExpressionCompiler) Option + header

4 Faculté I&C, Claude Petitpierre, André Maurer Tokens SPECIAL_TOKEN : // ignorés dans la grammaire, mais mémorisés { | | | | } TOKEN : { | | | | } TOKEN : { | }

5 Faculté I&C, Claude Petitpierre, André Maurer Règles de production « pour un parseur dexpressions: 3 + ((x+11)*5 + 8) » void prog() : { var t; } { t=expr() } void factor() : { } { ( | | "(" expr() ")" ) } void expr() : { } { term() ("+" term() )* } void term() : { var t; } { factor() ("*" factor() )* }

6 Faculté I&C, Claude Petitpierre, André Maurer Répétitions void product() : { /*déclarations, init*/ } { tag() + ( ) * endTag() } ( x )* 0 – n fois ( x )+ 1 – n fois ( x )? optionel [ x ] même que ci-dessus

7 Faculté I&C, Claude Petitpierre, André Maurer LOOKHEAD void statement() : { var nb = 0; } { "add" ( LOOKAHEAD (3) "A" "," nb=number(null) | "A" "," "B" | LOOKAHEAD ( "B" "," number() ) "B" "," nb=number(null) | "B" "," "B" ) }

8 Faculté I&C, Claude Petitpierre, André Maurer Actions à faire générer par le parseur void expr() : { } { term() ( "+" term() { var x = res.shift(); res[0] += x); } )* } x x+3

9 Faculté I&C, Claude Petitpierre, André Maurer Exécution des instructions void term() : { var t; } { factor() ( "*" factor() { var x = res.shift(); res[0] *= x); } )*

10 Faculté I&C, Claude Petitpierre, André Maurer Génération dun programme exécutable après compilation void factor() : { var myToken; } { ( {program.print("res.unshift(parseInt("+token.image+"))\n");} | myToken = { program.print("var x = gEById('"+myToken.image+"').value\n"); program.print("res.unshift(parseInt(x))\n"); keepVarName(myToken.image); } | "(" expr() ")" ) } automatique

11 Faculté I&C, Claude Petitpierre, André Maurer Tokens avec même débuts TOKEN : { | } Texte lu: : :aaa Le token choisi est celui qui est le plus long possible. Sil y a deux solutions de même longueur, la première est sélectionnée.

12 Faculté I&C, Claude Petitpierre, André Maurer JavaCC: queue des tokens et des special tokens Token next specialToken Token next specialToken Token next specialToken Token next specialToken Token next specialToken special tokens dans lordre inverse des flèches

13 Faculté I&C, Claude Petitpierre, André Maurer Fichiers à importer Les 2 premiers fichiers sont créés en compilant un fichier.jj Le troisième est disponible à ladresse indiquée Compilation

14 Faculté I&C, Claude Petitpierre, André Maurer Appel dune compilation var res function compile() { res = [ ] source à try { compiler initTokenManager(); ExpressionParserTokenManager( new inputStream(document.getElementById('prog').value) ) prog() // appel de la production initiale alert(res[0]) // montre le résultat } catch (e) { alert(!e.mess?e:e.mess) // erreurs } }


Télécharger ppt "Faculté I&C, Claude Petitpierre, André Maurer JavaCC Java compilers compiler (version générant du Javascript)"

Présentations similaires


Annonces Google