У меня есть эта секция грамматики в счастливом парсере, представленном на официальном сайте Happy, но мне нужно более подробное объяснение значения правил в скобках. Вот определение маркерасинтаксис happy parser value
%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 }
То, что я понимаю, что лексический, определенные ниже в файле, должны производить маркеры только типа definined, а затем построить разберите дерево, используя грамматику. Но что именно означает «{Пусть $ 2 $ 4 $ 6}"? Я знаю, что $ 2 относится ко второму аргументу правила и так далее, но если кто-то может дать мне «прочитанную человеком версию» правил, я был бы действительно счастлив. Надеюсь, я поняла.
Заранее спасибо.
Привет, спасибо всем за ответ. Например, в действии «Плюс $ 1 $ 3» было недостаточно написать $$ = $ 1 + $ 3? – davideb93
«Плюс» - это конструктор, который вы используете в Haskell, а «+» - это то, что вы находите в синтаксисе анализируемого документа. Ваш «$$ = $ 1 + $ 3» не имеет ничего, чтобы связать «+» в документе с «Плюсом» в дереве разбора. –