Ich habe diese Grammatik Abschnitt in einem glücklichen Parser, auf der offiziellen Website Happy gegeben, aber ich brauche eine tiefere Erklärung der Bedeutung der Regeln in Klammern. Hier ist die Token-DefinitionSyntax happy Parser Bedeutung
%token
let { TokenLet }
in { TokenIn }
int { TokenInt $$ }
var { TokenVar $$ }
'=' { TokenEq }
'+' { TokenPlus }
'-' { TokenMinus }
'*' { TokenTimes }
'/' { TokenDiv }
'(' { TokenOB }
')' { TokenCB }
und hier die Grammatik
Exp : let var '=' Exp in Exp { Let $2 $4 $6 }
| Exp1 { Exp1 $1 }
Exp1 : Exp1 '+' Term { Plus $1 $3 }
| Exp1 '-' Term { Minus $1 $3 }
| Term { Term $1 }
Term : Term '*' Factor { Times $1 $3 }
| Term '/' Factor { Div $1 $3 }
| Factor { Factor $1 }
Factor
: int { Int $1 }
| var { Var $1 }
| '(' Exp ')' { Brack $2 }
Was ich verstehe, ist, dass die Lexer, wie unten definiert in der Datei erzeugen sollten Token nur von der Art definined und dann bauen die den Baum unter Verwendung der Grammatik analysieren. Aber was genau bedeutet "{$ 2 $ 4 $ 6}"? Ich weiß, dass $ 2 sich auf das zweite Regelargument bezieht und so weiter, aber wenn mir jemand eine "menschliche Leseversion" der Regeln geben könnte, wäre ich wirklich glücklich. Hoffe, ich war klar.
Vielen Dank im Voraus.
Hallo danke an alle für die Antwort. Zum Beispiel war in der Aktion "Plus $ 1 $ 3" nicht genug, um $$ = $ 1 + $ 3 zu schreiben? – davideb93
Der "Plus" ist der Konstruktor, den Sie in Haskell verwenden, während das "+" in der Syntax des geparsten Dokuments zu finden ist. Ihr "$$ = $ 1 + $ 3" hat nichts, das "+" in dem Dokument mit dem "Plus" in dem Syntaxbaum zu verknüpfen. –