git @ Cat's Eye Technologies ALPACA / f15e787
Get almost all tests passing, just a mystery with neighbourhoods. catseye 12 years ago
3 changed file(s) with 21 addition(s) and 6 deletion(s). Raw diff Collapse all Expand all
0 neighbourhood Moore
1 (< > ^ v ^> ^< v> v<);
2 neighbourhood vonNeumann
3 (^ v < >);
4 state Space
5 to Thing when 1 in Moore Thing;
6 state Thing
7 to Space when 3 in (^ v < >) Space.
55 self.children = children
66 else:
77 self.children = []
8 assert isinstance(self.children, list)
89
910 def add_child(self, item):
1011 self.children.append(item)
110110 self.scanner.expect('}')
111111 attrs = AST('ReprDecls', attrs)
112112 classes = []
113 while self.scanner.consume('is'):
114 classes.append(self.scanner.consume_type('identifier'))
113 while self.scanner.on('is'):
114 classes.append(self.class_decl())
115115 classes = AST('MembershipDecls', classes)
116116 rules = self.rules()
117117 return AST('StateDefn', [char_repr, attrs, classes, rules],
121121 id = self.scanner.consume_type('identifier')
122122 self.scanner.expect(':')
123123 value = self.scanner.consume_type('string literal')
124 return AST('Attribute', [id, value])
124 return AST('Attribute', value=(id, value))
125
126 def class_decl(self):
127 self.scanner.expect('is')
128 id = self.scanner.consume_type('identifier')
129 return AST('ClassDecl', value=id)
125130
126131 def class_defn(self):
127132 self.scanner.expect('class')
128133 id = self.scanner.consume_type('identifier')
129134 classes = []
130 while self.scanner.consume('is'):
131 classes.append(self.scanner.consume_type('identifier'))
135 while self.scanner.on('is'):
136 classes.append(self.class_decl())
132137 rules = self.rules()
133 return AST('ClassDefn', rules, value=id)
138 return AST('ClassDefn', [rules], value=id)
134139
135140 def nbhd_defn(self):
136141 self.scanner.expect('neighbourhood')
142 self.scanner.check_type('identifier')
137143 id = self.scanner.consume_type('identifier')
138144 n = self.neighbourhood()
139145 return AST('NbhdDefn', [n], value=id)