Skip to content

Commit

Permalink
fixed: now working
Browse files Browse the repository at this point in the history
  • Loading branch information
grammarware committed Nov 30, 2012
1 parent 75823c1 commit 102d62f
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 76 deletions.
50 changes: 0 additions & 50 deletions shared/rascal/src/io/json/JSON.rsc

This file was deleted.

24 changes: 14 additions & 10 deletions shared/rascal/src/io/json/Parse.rsc
Expand Up @@ -18,22 +18,26 @@ data JSO

JSO str2jso(str s)
{
PT = parse(#BasicType,trim(s));
PT = parse(#JSONBasicType,trim(s));
return basic2jso(PT);
}

JSO basic2jso(BasicType t)
JSO basic2jso(JSONBasicType t)
{
//if ((BasicType)`Number v` := PT)
//println("numberr!");
switch(t)
{
case (BasicType)`<Number v>`: return str2num("<v>");
case (BasicType)`<String v>`: return str2str("<v>");
case (BasicType)`<Boolean v>`: return str2bool("<v>");
case (BasicType)`<Array v>`: return arr2array(v);
case (BasicType)`<Object v>`: return obj2object(v);
case (BasicType)`<Null v>`: return jsnull();
case (JSONBasicType)`<JSONNumber v>`: return str2num("<v>");
case (JSONBasicType)`<JSONString v>`: return str2str("<v>");
case (JSONBasicType)`<JSONBoolean v>`: return str2bool("<v>");
case (JSONBasicType)`<JSONArray v>`:
return jsarray(arr2array(v));
//return jsnull();
case (JSONBasicType)`<JSONObject v>`:
return jsobject(obj2object(v));
//return jsnull();
case (JSONBasicType)`<JSONNull v>`: return jsnull();
default:
println("dunno");
}
Expand All @@ -45,8 +49,8 @@ JSO str2str(str s) = jsstring(s);
JSO str2bool("true") = jsboolean(true);
default JSO str2bool(str s) = jsboolean(false);

list[JSO] arr2array((Array)`[<{BasicType ","}* vs>]`) = [basic2jso(v) | BasicType v <- vs];
map[JSO,JSO] obj2object((Object)`{<{KeyValue ","}* kvs>}`) = (basic2jso(kv.key):basic2jso(kv.val) | KeyValue kv <- kvs);
list[JSO] arr2array((JSONArray)`[<{JSONBasicType ","}* vs>]`) = [basic2jso(v) | JSONBasicType v <- vs];
map[JSO,JSO] obj2object((JSONObject)`{<{JSONKeyValue ","}* kvs>}`) = (basic2jso(kv.key):basic2jso(kv.val) | JSONKeyValue kv <- kvs);

//| jsarray(list[JSO] xs)
// | jsobject(map[JSO,JSO] kvs)
Expand Down
32 changes: 16 additions & 16 deletions shared/rascal/src/io/json/Syntax.rsc
Expand Up @@ -4,29 +4,29 @@ module io::json::Syntax
layout L = WS;
lexical WS = [\ \n\r\t]* !>> [\ \n\r\t];

start syntax Data = BasicType;

syntax BasicType
= Number
| String
| Boolean
| Array
| Object
| Null
start syntax JSONData = JSONBasicType;

syntax JSONBasicType
= JSONNumber
| JSONString
| JSONBoolean
| JSONArray
| JSONObject
| JSONNull
;

syntax Number = "-"? Digits ("." Digits)?;
syntax JSONNumber = "-"? Digits ("." Digits)?;
lexical Digits = [0-9]+ !>> [0-9];

syntax String = DoubleQuotedString;
syntax JSONString = DoubleQuotedString;
lexical DoubleQuotedString = [\"] DQSElement* [\"]; //"
lexical DQSElement = ![\"] | [\\][\"] ; //"

syntax Boolean = "false" | "true" ;
syntax JSONBoolean = "false" | "true" ;

syntax Array = "[" {BasicType ","}* "]";
syntax JSONArray = "[" {JSONBasicType ","}* "]";

syntax Object = "{" {KeyValue ","}* "}";
syntax KeyValue = BasicType key ":" BasicType val;
syntax JSONObject = "{" {JSONKeyValue ","}* "}";
syntax JSONKeyValue = JSONBasicType key ":" JSONBasicType val;

syntax Null = "null" ;
syntax JSONNull = "null" ;

0 comments on commit 102d62f

Please sign in to comment.