about summary refs log tree commit diff stats
Commit message (Expand)AuthorAgeFilesLines
* mu.subx: spilling register for reg varsKartik Agaram2020-05-182-20/+22
* mu.subx: size-of-derefKartik Agaram2020-05-181-8/+12
* mu.subx: size-ofKartik Agaram2020-05-181-6/+8
* mu.subx: populate-mu-type-offsetsKartik Agaram2020-05-181-19/+24
* -Kartik Agaram2020-05-181-30/+0
* mu.subx: compute-size-of-varKartik Agaram2020-05-181-6/+8
* mu.subx: lookup-or-create-constantKartik Agaram2020-05-181-12/+12
* mu.subx: new-blockKartik Agaram2020-05-181-3/+13
* mu.subx: find-in-function-outputsKartik Agaram2020-05-181-11/+27
* mu.subx: fourth test passingKartik Agaram2020-05-181-16/+35
* mu.subx: third test passingKartik Agaram2020-05-181-24/+57
* mu.subx: include missing argKartik Agaram2020-05-181-2/+2
* mu.subx: lookup-or-define-varKartik Agaram2020-05-181-9/+9
* mu.subx: second test passingKartik Agaram2020-05-181-1/+2
* mu.subx: add-operation-and-inputs-to-stmtKartik Agaram2020-05-181-27/+46
* mu.subx: lookup-var, lookup-var-or-literalKartik Agaram2020-05-181-20/+31
* -Kartik Agaram2020-05-181-18/+14
* mu.subx: new-literal-integerKartik Agaram2020-05-181-30/+62
* mu.subx: first passing testKartik Agaram2020-05-182-30/+40
* -Kartik Agaram2020-05-181-2/+2
* mu.subx: new-reg-var-defKartik Agaram2020-05-181-14/+11
* mu.subx: new-var-defKartik Agaram2020-05-181-8/+15
* mu.subx: parse-mu-var-def testsKartik Agaram2020-05-181-2/+12
* mu.subx: parse-mu-var-defKartik Agaram2020-05-181-11/+22
* mu.subx: parse-mu-stmtKartik Agaram2020-05-181-14/+25
* mu.subx: parse-mu-block and parse-mu-named-blockKartik Agaram2020-05-181-28/+70
* mu.subx: more progress on parse-mu-blockKartik Agaram2020-05-181-4/+12
* -Kartik Agaram2020-05-181-60/+77
* -Kartik Agaram2020-05-181-1/+1
* mu.subx: mu-block-nameKartik Agaram2020-05-181-29/+32
* mu.subx: append-to-blockKartik Agaram2020-05-181-3/+6
* mu.subx: append-listKartik Agaram2020-05-181-30/+52
* mu.subx: parse-var-with-typeKartik Agaram2020-05-181-7/+2
* mu.subx: parse-type-treeKartik Agaram2020-05-181-20/+31
* mu.subx: parse-typeKartik Agaram2020-05-182-33/+26
* mu.subx: add-operation-and-inputs-to-stmtKartik Agaram2020-05-181-2/+2
* mu.subx: pos-slice, pos-or-insert-sliceKartik Agaram2020-05-181-4/+13
* mu.subx: some calls to slice-to-stringKartik Agaram2020-05-181-5/+5
* -Kartik Agaram2020-05-181-21/+21
* mu.subx: partial parse-var-with-typeKartik Agaram2020-05-181-6/+11
* mu.subx: new-var, new-var-from-sliceKartik Agaram2020-05-182-34/+56
* mu.subx: size of 'vars' stackKartik Agaram2020-05-181-27/+27
* mu.subx: parse-muKartik Agaram2020-05-181-3/+14
* -Kartik Agaram2020-05-181-21/+9
* -Kartik Agaram2020-05-181-29/+28
* mu.subx: new-var, typeinfo entriesKartik Agaram2020-05-181-29/+76
* -Kartik Agaram2020-05-181-3/+3
* -Kartik Agaram2020-05-181-7/+9
* mu.subx: find-or-create-typeinfoKartik Agaram2020-05-181-29/+65
* mu.subx: offsets for type data structuresKartik Agaram2020-05-181-8/+8
v class='alt'>
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71




                                                                              
                 
                                                
          

                                               
                                                               


                                               

                                                    
















                                                    
                                      
                                 




                         

                                                         

                        


                               
                         
                                
                                        




                                            
   

                        
 

                                          
                                                 
          
                                                              
 




                      
                                                                                
// So far instructions can only contain linear lists of properties. Now we add
// support for more complex trees of properties in dilated reagents. This will
// come in handy later for expressing complex types, like "a dictionary from
// (address to array of charaters) to (list of numbers)".

:(scenarios load)
:(scenario dilated_reagent_with_nested_brackets)
def main [
  {1: number, foo: (bar (baz quux))} <- copy 34
]
+parse:   product: {1: "number", "foo": ("bar" ("baz" "quux"))}

:(before "End Parsing Reagent Property(value)")
value = parse_string_tree(value);
:(before "End Parsing Reagent Type Property(value)")
value = parse_string_tree(value);

:(code)
string_tree* parse_string_tree(string_tree* s) {
  assert(!s->left && !s->right);
  if (s->value.at(0) != '(') return s;
  string_tree* result = parse_string_tree(s->value);
  delete s;
  return result;
}

string_tree* parse_string_tree(const string& s) {
  istringstream in(s);
  in >> std::noskipws;
  return parse_string_tree(in);
}

string_tree* parse_string_tree(istream& in) {
  skip_whitespace_but_not_newline(in);
  if (!has_data(in)) return NULL;
  if (in.peek() == ')') {
    in.get();
    return NULL;
  }
  if (in.peek() != '(') {
    string_tree* result = new string_tree(next_word(in));
    return result;
  }
  in.get();  // skip '('
  string_tree* result = NULL;
  string_tree** curr = &result;
  while (in.peek() != ')') {
    assert(has_data(in));
    *curr = new string_tree("");
    skip_whitespace_but_not_newline(in);
    if (in.peek() == '(')
      (*curr)->left = parse_string_tree(in);
    else
      (*curr)->value = next_word(in);
    curr = &(*curr)->right;
  }
  in.get();  // skip ')'
  return result;
}

:(scenario dilated_reagent_with_type_tree)
% Hide_errors = true;  // 'map' isn't defined yet
def main [
  {1: (foo (address array character) (bar number))} <- copy 34
]
# just to avoid errors
container foo [
]
container bar [
]
+parse:   product: {1: ("foo" ("address" "array" "character") ("bar" "number"))}