diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-03-14 01:00:48 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-03-14 01:00:48 -0700 |
commit | 2badd89a58b9666563746d71069abf16f05709ea (patch) | |
tree | 779c9feb243fc8d0f33051cd8323fd23f912f373 /055parse_tree.cc | |
parent | 8b095f802129f8c328a3a4dc3de4443890d34d59 (diff) | |
download | mu-2badd89a58b9666563746d71069abf16f05709ea.tar.gz |
2778 - fix all layers
Diffstat (limited to '055parse_tree.cc')
-rw-r--r-- | 055parse_tree.cc | 99 |
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); |