summary refs log tree commit diff stats
path: root/doc/pydoc/ranger.ext.get_all_modules.html
Commit message (Collapse)AuthorAgeFilesLines
* updated pydochut2010-03-121-11/+12
|
* incremented version number and updated pydoc html files v1.0.3hut2010-02-161-2/+2
|
* updated pydoc documentationhut2010-01-131-1/+13
|
* moved pydoc pages to doc/pydochut2009-12-251-0/+22
ram <vc@akkartik.com> 2015-10-27 16:34:58 -0700 committer Kartik K. Agaram <vc@akkartik.com> 2015-10-27 16:37:57 -0700 2293' href='/akkartik/mu/commit/055parse_tree.cc?h=hlt&id=6808ff7d6df42aa8a8abe63041254b40b76ba8db'>6808ff7d ^
a17f9186 ^
6808ff7d ^

9cfd925a ^
6808ff7d ^
15f79a66 ^
6808ff7d ^
15f79a66 ^





ff8d96ae ^




a072f674 ^
ff8d96ae ^





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81




                                                                              































                                                                                   

                                                         

                        











                                            
   

                        
 

                                          
                                                 
             
                                                              
 





                                                                                                                     




                                                                            
                                           





                                                                                     
// 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)
recipe 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);

:(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(in);
  if (in.eof()) 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(!in.eof());
    *curr = new string_tree("");
    skip_whitespace(in);
    skip_ignored_characters(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
recipe 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" : <>>> : <>>>>}

//: an exception is 'new', which takes a type tree as its ingredient *value*

:(scenario dilated_reagent_with_new)
recipe main [
  x:address:number <- new {(foo bar): type}
]
# type isn't defined so size is meaningless, but at least we parse the type correctly
+new: size of <"foo" : <"bar" : <>>> is 1

:(before "End Post-processing(type_name) When Converting 'new'")
type_name = parse_string_tree(type_name);