📄 davesexample.ly
字号:
Parses simple lambda expressions to combinators> { > module Parser where> import Lexer> import Convert> import PreludeGlaArray> }> %name parse> %tokentype { Token }> %token idT { Ident $$ }> numT { Number $$ }> boolT { Boolean $$ }> "(" { LeftBracket }> ")" { RightBracket }> "[" { LeftSquare }> "]" { RightSquare }> "[]" { EmptyList }> ";" { SemiColon }> ":" { Colon }> "+" { Infix "+" }> "-" { Infix "-" }> "/" { Infix "/" }> "*" { Infix "*" }> "==" { Infix "==" }> "/=" { Infix "/=" }> ">" { Infix ">" }> "<" { Infix "<" }> ">=" { Infix ">=" }> "<=" { Infix "<=" }> "=" { Builtin "=" }> "else" { Builtin "else" }> "if" { Builtin "if" }> "in" { Builtin "in" }> "let" { Builtin "let" }> "then" { Builtin "then" }> "end" { Builtin "end" }> %%> P : "let" Dec "in" B { mkLet $2 $4}> | "if" B "then" B "else" B { mkIf $2 $4 $6}> | B { $1 }> B :: { Seq (Ptr Exp) }> B : E "==" E { mkOp $1 Equ $3 }> | E "/=" E { mkOp $1 NEq $3 }> | E ">" E { mkOp $1 GT $3 }> | E "<" E { mkOp $1 LT $3 }> | E ">=" E { mkOp $1 GTE $3 }> | E "<=" E { mkOp $1 LTE $3 }> | E { $1 }> E :: { Seq (Ptr Exp) }> E : E "+" T { mkOp $1 Add $3}> | E "-" T { mkOp $1 Sub $3}> | T { $1 }> T :: { Seq (Ptr Exp) }> T : T "*" F { mkOp $1 Mul $3 }> | T "/" F { mkOp $1 Quo $3 }> | F { $1 }> F :: { Seq (Ptr Exp) }> F : "(" B ")" { $2 }> | numT { mkNum $1 }> | boolT { mkBool $1 }> | idT { newPtr (mkVar $1) }> | Apps { mkApps $1 }> Apps :: { Seq [Ptr Exp] }> Apps : F Apps { mkApp $1 $2 }> | F { mkAtom $1 }> Dec :: { (Token,Seq (Ptr Exp)) }> Dec : idT Args "=" B { ($1, mkFun $1 $2 $4) }> Args :: { [Exp] }> Args : idT Args { mkVar $1 : $2}> | { [] }> {> happyError :: Text a => a -> b> happyError x = error ("Parse error, line " ++ show x ++ "\n")> }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -