feat: add builtin prec/prio parsers

This commit is contained in:
Leonardo de Moura 2020-12-14 15:05:39 -08:00
parent cfb60c0cf3
commit f95a450894
3 changed files with 8 additions and 4 deletions

View file

@ -635,7 +635,7 @@ instance Option.hasQuote {α : Type} [Quote α] : Quote (Option α) where
/- Evaluator for `prec` DSL -/
partial def evalPrec : Syntax → MacroM Nat
| `(prec| $num:numLit) => return num.isNatLit?.getD 0
-- | `(prec| $num:numLit) => return num.isNatLit?.getD 0
| `(prec| $a + $b) => return (← evalPrec a) + (← evalPrec b)
| `(prec| $a - $b) => return (← evalPrec a) - (← evalPrec b)
| prec => Macro.withIncRecDepth prec do

View file

@ -12,14 +12,13 @@ import Init.Prelude
namespace Lean.Parser.Syntax
syntax [numPrec] num : prec
syntax:65 [addPrec] prec " + " prec:66 : prec
syntax:65 [subPrec] prec " - " prec:66 : prec
end Lean.Parser.Syntax
macro "max" : prec => `(1024)
macro "lead" : prec => `(1023)
-- macro "max" : prec => `(1024)
-- macro "lead" : prec => `(1023)
macro "(" p:prec ")" : prec => p
-- Basic notation for defining parsers

View file

@ -37,6 +37,11 @@ def «precedence» := parser! ":" >> precedenceLit
def optPrecedence := optional (atomic «precedence»)
namespace Syntax
@[builtinPrecParser] def numPrec := checkPrec maxPrec >> numLit
@[builtinPrioParser] def numPrio := checkPrec maxPrec >> numLit
@[builtinPrioParser] def highPrio := parser!:maxPrec nonReservedSymbol "high" true
@[builtinSyntaxParser] def paren := parser! "(" >> many1 syntaxParser >> ")"
@[builtinSyntaxParser] def cat := parser! ident >> optPrecedence
@[builtinSyntaxParser] def unary := parser! ident >> checkNoWsBefore >> "(" >> many1 syntaxParser >> ")"