about summary refs log tree commit diff stats
path: root/055parse_tree.cc
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-03-14 01:00:48 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-03-14 01:00:48 -0700
commit2badd89a58b9666563746d71069abf16f05709ea (patch)
tree779c9feb243fc8d0f33051cd8323fd23f912f373 /055parse_tree.cc
parent8b095f802129f8c328a3a4dc3de4443890d34d59 (diff)
downloadmu-2badd89a58b9666563746d71069abf16f05709ea.tar.gz
2778 - fix all layers
Diffstat (limited to '055parse_tree.cc')
-rw-r--r--055parse_tree.cc99
1 files changed, 0 insertions, 99 deletions
diff --git a/055parse_tree.cc b/055parse_tree.cc
deleted file mode 100644
index a65f87e7..00000000
--- a/055parse_tree.cc
+++ /dev/null
@@ -1,99 +0,0 @@
-// 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)".
-
-:(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"))
-
-:(scenario dilated_reagent_in_static_array)
-def main [
-  {1: (array (address shared number) 3)} <- create-array
-  5:address:address:shared:number <- index-address {1: (array (address shared number) 3)}, 0
-  *5:address:address:shared:number <- new number:type
-  **5:address:address:shared:number <- copy 34
-  6:number <- copy **5:address:address:shared:number
-]
-+run: creating array of size 4
-+mem: storing 34 in location 6
-
-//: an exception is 'new', which takes a type tree as its ingredient *value*
-
-:(scenario dilated_reagent_with_new)
-def main [
-  x:address:shared:address:number <- new {(address number): type}
-]
-+new: size of ("address" "number") is 1
-
-:(before "End Post-processing(expected_product) When Checking 'new'")
-{
-  string_tree* tmp_type_names = parse_string_tree(expected_product.type->name);
-  delete expected_product.type;
-  expected_product.type = new_type_tree(tmp_type_names);
-  delete tmp_type_names;
-}
-:(before "End Post-processing(type_name) When Converting 'new'")
-type_name = parse_string_tree(type_name);