lean4-htt/library/init/lean/parser/syntax.lean

53 lines
1.6 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Copyright (c) 2018 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Sebastian Ullrich
-/
prelude
import init.data
namespace lean.parser
@[reducible] def syntax_id :=
@[reducible] def macro_scope_id :=
-- byte offset into source string
@[reducible] def position :=
structure span :=
(left : position)
(right : position)
(file : string)
structure syntax_ident :=
(id : syntax_id) (sp : option span) (name : name) (msc : option macro_scope_id)
structure syntax_atom :=
(id : syntax_id) (sp : option span) (val : name)
structure syntax_node (syntax : Type) :=
(id : syntax_id) (sp : option span) (m : name) (args : list syntax)
inductive syntax
| ident (val : syntax_ident)
/- any non-ident atom -/
| atom (val : syntax_atom)
| list (ls : list syntax)
| node (val : syntax_node syntax)
protected meta def syntax.to_format : syntax → format :=
λ s, format.group $ format.nest 2 $ match s with
| (syntax.ident ident@{msc := none, ..}) := format!"({ident.id}: ident `{ident.name})"
| (syntax.ident ident@{msc := some sc, ..}) := format!"({ident.id}: ident `{ident.name} from {sc})"
| (syntax.atom atom) := format!"({atom.id}: atom {atom.val})"
| (syntax.list ls) := format!"[{format.join $ ls.map syntax.to_format}]"
| (syntax.node node) :=
let args := format.join $ node.args.map (λ arg, format!"\n{arg.to_format}") in
format!"({node.id}: node `{node.m} {args})"
end
meta instance : has_to_format syntax := ⟨syntax.to_format⟩
meta instance : has_to_string syntax := ⟨to_string ∘ to_fmt⟩
meta instance : has_repr syntax := ⟨to_string ∘ to_fmt⟩
end lean.parser