mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-21 02:39:31 -06:00
gfse: edit abstract syntax in text mode with instant syntax error reporting
This is an experimental feature. It requires server support for parsing and is thus not available while offline, unlike most other editing functionality.
This commit is contained in:
47
src/compiler/SimpleEditor/JSON.hs
Normal file
47
src/compiler/SimpleEditor/JSON.hs
Normal file
@@ -0,0 +1,47 @@
|
||||
module SimpleEditor.JSON where
|
||||
|
||||
import Text.JSON
|
||||
|
||||
import SimpleEditor.Syntax
|
||||
|
||||
|
||||
instance JSON Grammar where
|
||||
showJSON (Grammar name extends abstract concretes) =
|
||||
makeObj [prop "basename" name,
|
||||
prop "extends" extends,
|
||||
prop "abstract" abstract,
|
||||
prop "concretes" concretes]
|
||||
|
||||
instance JSON Abstract where
|
||||
showJSON (Abstract startcat cats funs) =
|
||||
makeObj [prop "startcat" startcat,
|
||||
prop "cats" cats,
|
||||
prop "funs" funs]
|
||||
|
||||
instance JSON Fun where showJSON (Fun name typ) = signature name typ
|
||||
instance JSON Param where showJSON (Param name rhs) = definition name rhs
|
||||
instance JSON Oper where showJSON (Oper name rhs) = definition name rhs
|
||||
|
||||
signature name typ = makeObj [prop "name" name,prop "type" typ]
|
||||
definition name rhs = makeObj [prop "name" name,prop "rhs" rhs]
|
||||
|
||||
instance JSON Concrete where
|
||||
showJSON (Concrete langcode opens params lincats opers lins) =
|
||||
makeObj [prop "langcode" langcode,
|
||||
prop "opens" opens,
|
||||
prop "params" params,
|
||||
prop "lincats" lincats,
|
||||
prop "opers" opers,
|
||||
prop "lins" lins]
|
||||
|
||||
instance JSON Lincat where
|
||||
showJSON (Lincat cat lintype) =
|
||||
makeObj [prop "cat" cat,prop "type" lintype]
|
||||
|
||||
instance JSON Lin where
|
||||
showJSON (Lin fun args lin) =
|
||||
makeObj [prop "fun" fun,
|
||||
prop "args" args,
|
||||
prop "lin" lin]
|
||||
|
||||
prop name v = (name,showJSON v)
|
||||
Reference in New Issue
Block a user