chore: simplify checkPrec
This commit is contained in:
parent
a677c18683
commit
77e1260ed2
3 changed files with 8 additions and 10 deletions
|
|
@ -1082,17 +1082,15 @@ let asciiSym := asciiSym.trim;
|
|||
{ info := unicodeSymbolInfo sym asciiSym,
|
||||
fn := unicodeSymbolFn sym asciiSym }
|
||||
|
||||
/- Succeeds if prec <= upper -/
|
||||
def checkPrecFn (upper : Nat) (errorMsg : String) : ParserFn :=
|
||||
/- Succeeds if `c.prec <= prec` -/
|
||||
def checkPrecFn (prec : Nat) : ParserFn :=
|
||||
fun c s =>
|
||||
if c.prec <= upper then s
|
||||
else s.mkUnexpectedError errorMsg
|
||||
if c.prec <= prec then s
|
||||
else s.mkUnexpectedError "unexpected token at this precedence level; consider parenthesizing the term"
|
||||
|
||||
private def precErrorMsg := "unexpected token at this precedence level; consider parenthesizing the term"
|
||||
|
||||
@[inline] def checkPrec (upper : Nat) (errorMsg : String := precErrorMsg) : Parser :=
|
||||
@[inline] def checkPrec (prec : Nat) : Parser :=
|
||||
{ info := epsilonInfo,
|
||||
fn := checkPrecFn upper errorMsg }
|
||||
fn := checkPrecFn prec }
|
||||
|
||||
/- Version of `leadingNode` which uses `checkPrec` -/
|
||||
@[inline] def leadingNodePrec (n : SyntaxNodeKind) (prec : Nat) (p : Parser) : Parser :=
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ def explicitBinder (requireType := false) := parser! "(" >> many1 binderIdent >>
|
|||
def implicitBinder (requireType := false) := parser! "{" >> many1 binderIdent >> binderType requireType >> "}"
|
||||
def instBinder := parser! "[" >> optIdent >> termParser >> "]"
|
||||
def bracketedBinder (requireType := false) := explicitBinder requireType <|> implicitBinder requireType <|> instBinder
|
||||
@[builtinTermParser] def depArrow := parser! [appPrec] bracketedBinder true >> checkPrec 25 "expected parentheses around dependent arrow" >> unicodeSymbol " → " " -> " >> termParser
|
||||
@[builtinTermParser] def depArrow := parser! [appPrec] bracketedBinder true >> checkPrec 25 >> unicodeSymbol " → " " -> " >> termParser
|
||||
def simpleBinder := parser! many1 binderIdent
|
||||
@[builtinTermParser] def «forall» := parser! [leadPrec] unicodeSymbol "∀" "forall" >> many1 (simpleBinder <|> bracketedBinder) >> ", " >> termParser
|
||||
|
||||
|
|
|
|||
|
|
@ -525,7 +525,7 @@ f 20
|
|||
max a b
|
||||
(Term.app (Term.id `max (null)) (null (Term.id `a (null)) (Term.id `b (null))))
|
||||
f {x : a} -> b
|
||||
failed as expected, error: <input>:1:10 expected parentheses around dependent arrow
|
||||
failed as expected, error: <input>:1:10 unexpected token at this precedence level; consider parenthesizing the term
|
||||
(x := 20)
|
||||
failed as expected, error: <input>:1:3 expected ')' or ':'
|
||||
let x 10; x
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue