lean4-htt/library/init/lean/parser/syntax.lean
2018-04-30 16:13:01 -07:00

58 lines
1.7 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.lean.name init.lean.parser.parser
namespace lean
namespace parser
@[reducible] def syntax_id :=
@[reducible] def macro_scope_id :=
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)
| lst (ls : list syntax)
| node (val : syntax_node syntax)
namespace syntax
open format
protected mutual def to_format, to_format_lst
with to_format : syntax → format
| (ident {id := id, name := n, msc := none, ..}) :=
paren (to_fmt id ++ ": ident " ++ to_fmt n)
| (ident {id := id, name := n, msc := some sc, ..}) :=
paren (to_fmt id ++ ": ident " ++ to_fmt n ++ " from " ++ to_fmt sc)
| (atom a) := paren (to_fmt a.id ++ ": atom " ++ to_fmt a.val)
| (lst ls) := paren $ join $ to_format_lst ls
| (node {id := id, m := n, args := args, ..}) :=
paren (to_fmt id ++ ": node " ++ to_fmt n ++ join (to_format_lst args))
with to_format_lst : list syntax → list format
| [] := []
| (s::ss) := (line ++ to_format s) :: to_format_lst ss
end syntax
instance : has_to_format syntax := ⟨syntax.to_format⟩
instance : has_to_string syntax := ⟨to_string ∘ to_fmt⟩
end parser
end lean