%Links und %right in yacc -
{%
#include<stdio.h>
#include<stdlib.h>
%}
%token ID NUM IF THEN LE GE EQ NE OR AND ELSE
%right '='
%left AND OR
%left '<' '>' LE GE EQ NE
%left '+''-'
%left '*''/'
%right UMINUS
%left '!'
%%
Oben erwähnt ist ein Teil der yacc-Programm für eine einfache WENN SONST Programm....
ich bin nur ein Anfänger und verstehe nicht, was meinen wir mit %right
und %left
Bedingungen......
plz helfen mir, auf diese Gelegenheit...
InformationsquelleAutor Arjun K P | 2012-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
%left
und%right
geben Sie die Assoziativität eines Betreibers. Die Assoziativität einer operation bestimmt, welche der beiden Operationen die gleiche Priorität erfolgt zuerst.Nehmen wir an, wir haben die Grammatik-Regeln:
und nehmen wir an, wir analysieren den Ausdruck x+y-z. Sehen Sie, wie die Priorität von plus und minus ist das gleiche, dieser Ausdruck kann interpretiert werden als (x+y)-z oder x+(y-z). Dies scheint nicht wie eine große Sache, aber es führt eine Mehrdeutigkeit in der Grammatik.
Analysieren Probleme und Theorie beiseite, angenommen wir analysieren den Ausdruck. 6+5-7, und meint, dass unsere Sprache können nur mit natürlichen zahlen, und wirft eine Ausnahme, wenn Unterlauf Auftritt. Das Ergebnis
(6+5)-7
(4) nicht gleich6+(5-7)
(Ausnahme), so dass wir nicht in der Lage, vorherzusagen, das Ergebnis-es sei denn, wir definieren die evaulation Bestellung durch Angabe der Assoziativität der Operatoren. Betrachten Sie auch den Fall von Ausdrücken wief()+g()+h()
, wenn die Operanden sind Funktionen, die Nebenwirkungen haben können.%left '*' '/'
unten geschrieben%left '+' '-'
,* and /
bekommt mehr Priorität als+ and -
InformationsquelleAutor SáT
Ich weiß, das ist eine alte Frage, aber bei einigen anderen ist nach diesen Informationen suchen :
%left
,%right
und%nonassoc
definiert, wie yacc löst die Wiederholung von Operatoren. Im Falle Sie haben:beide Operatoren haben die gleiche Priorität ( Sie sind die gleichen 🙂 ), in diesem Fall yacc lösen können:
oder:
und schließlich:
Lesen Sie mehr in hier.
InformationsquelleAutor Gustavo Vargas