Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAlexandre Evrard Modifié depuis plus de 10 années
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 : { | <IDENTIFIER: ( ["a"-"z"] | ["A"-"Z"] ) ( ["a"-"z"] | ["A"-"Z"] | ["0"-"9"] )* > }
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); } )* } 25382538 x 253 253 2 5 11 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: :234 2 3 4 :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 } }
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.