dictionary.a68

     
   1  COMMENT
   2  
   3  @section Synopsis
   4  
   5  Write Python-style dictionaries in json format.
   6  
   7  COMMENT
   8  
   9  MODE DICT = FLEX [0] PAIR,
  10       PAIR = STRUCT (KEY key, VALUE val),
  11       VALUE = UNION (BASIC, [] BASIC, REF DICT, VOID),
  12       BASIC = UNION (INT, REAL, BOOL, STRING),
  13       KEY = STRING;
  14  
  15  REF DICT empty dict = NIL, VALUE null = EMPTY;
  16  
  17  DICT empty := PAIR ("empty_field", null);
  18  
  19  CHAR quote = """";
  20  
  21  OP JSON = (REF DICT dict) VOID:
  22  
  23     # Write dictionary in json format. #
  24  
  25     IF dict IS empty dict
  26     THEN ~
  27     ELSE print ("{");
  28          
  29          FOR i TO UPB dict
  30          DO OP ONE = (VALUE v) VOID:
  31                CASE v
  32                IN (VOID): print ("null"),
  33                   (REF DICT d): JSON d,
  34                   (BASIC w):
  35                      CASE w
  36                      IN (STRING s): print (quote + s + quote),
  37                         (BOOL b): print ((b | "True" | "False")),
  38                         (INT i): print (whole (i, 0)),
  39                         (REAL r): print (stringf (HEAP STRING, ($%g$, r)))
  40                      ESAC,
  41                   ([] BASIC a): (
  42                      print ("{");
  43                      FOR j TO UPB a
  44                      DO ONE (a[j]);
  45                         print((j < UPB a | ", " | "}"))
  46                      OD
  47                   )
  48                ESAC;
  49  
  50             print ((quote, key OF dict[i], quote, ": "));
  51             ONE val OF dict[i];
  52             print ((i < UPB dict | ", " | "}"))
  53          OD
  54     FI;
  55  
  56  [] BASIC row = (1, pi, TRUE, "algol 68");
  57  DICT test := (("empty_dict", empty), ("row", row), ("string", "string"));
  58  
  59  JSON test;
  60  
  61  newline (standout)