Happy の公式サイトで提供されている happy パーサーにこの文法セクションがありますが、括弧内のルールの意味についてより深い説明が必要です。これがトークンの定義です
%token
let { TokenLet }
in { TokenIn }
int { TokenInt $$ }
var { TokenVar $$ }
'=' { TokenEq }
'+' { TokenPlus }
'-' { TokenMinus }
'*' { TokenTimes }
'/' { TokenDiv }
'(' { TokenOB }
')' { TokenCB }
そしてここに文法セクションがあります
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 }
私が理解しているのは、ファイルの下で定義されているレクサーは、定義されたタイプのトークンのみを生成し、文法を使用して解析ツリーを構築する必要があるということです。しかし、「{Let $2 $4 $6}」とは正確にはどういう意味ですか? $2 が 2 番目のルール引数などを指していることは知っていますが、誰かがルールの「人間が読めるバージョン」をくれれば、私は本当に幸せです。私がはっきりしていることを願っています。
前もって感謝します。