Question

J'apprends Bison et pour l'instant, je ne fais que l'exemple rpcalc , mais je souhaite maintenant implémenter une fonction d'impression (comme printf de C), mais je ne sais pas comment faire cela et je prévois une syntaxe comme celle-ci print ("Quelque chose ici"); , mais je ne sais pas comment construire la fonction d'impression et je ne sais pas comment créer ce ; en fin de ligne.
Merci de votre aide.

Était-ce utile?

La solution

Vous devez d’abord vous demander:
 & nbsp; Quelles sont les [sous-] parties de mon "print" ("quelque chose"); ' syntaxe?

Une fois ces pièces identifiées, " simplement " décrivez-les sous la forme de règles de syntaxe de grammaire, ainsi que de règles de production applicables. Et laissez ensuite Bison générer l’analyseur pour vous; c'est à peu près tout.

Pour vous mettre sur la bonne voie :
La demi-colonne est probablement un élément que vous utiliserez pour séparer les états (un tel "appel" pour imprimer depuis un autre).
"print" est probablement un mot-clé , ou de préférence un nom de fonction natif de votre langue.
La instruction print semble prendre une chaîne littérale comme [un des] arguments. une chaîne littérale commence et se termine par un guillemet double (et autorise probablement les guillemets masqués) etc. Les expressions en gras et en italique ci-dessus sont certaines des entités (les "symboles" dans le jargon de l'analyseur) que vous devrez probablement définir dans la syntaxe de votre langue. Pour cela, vous utiliserez les règles de grammaire de Bison, telles que

stmt : print_stmt ';' | input_stmt ';'| some_other_stmt ';' ;
prnt_stmt : print '(' args ')' 
     { printf( $3 ); }
    ;

args : arg ',' args;
...

Depuis la question posée à propos de la demi-colonne, les différentes utilisations de cette dernière ont peut-être semé la confusion. voir par exemple ci-dessus comment le ';' appartenir à la syntaxe de votre langue par laquelle le; (pas de guillemets) à la fin de chaque règle de grammaire font partie de la langue de Bison.

Remarque: il s’agit bien entendu d’une implémentation simpliste visant à montrer l’essentiel. De plus, la syntaxe de Bison peut être un tatouage (été / fait, mais cela fait longtemps ;-) J'ai alors "rencontré" ANTLR ne reviendra jamais à Bison, même si je vois en quoi son caractère léger et totalement autonome peut le rendre approprié dans certains cas)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top