110 | 110 |
self.scanner.expect('}')
|
111 | 111 |
attrs = AST('ReprDecls', attrs)
|
112 | 112 |
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())
|
115 | 115 |
classes = AST('MembershipDecls', classes)
|
116 | 116 |
rules = self.rules()
|
117 | 117 |
return AST('StateDefn', [char_repr, attrs, classes, rules],
|
|
121 | 121 |
id = self.scanner.consume_type('identifier')
|
122 | 122 |
self.scanner.expect(':')
|
123 | 123 |
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)
|
125 | 130 |
|
126 | 131 |
def class_defn(self):
|
127 | 132 |
self.scanner.expect('class')
|
128 | 133 |
id = self.scanner.consume_type('identifier')
|
129 | 134 |
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())
|
132 | 137 |
rules = self.rules()
|
133 | |
return AST('ClassDefn', rules, value=id)
|
|
138 |
return AST('ClassDefn', [rules], value=id)
|
134 | 139 |
|
135 | 140 |
def nbhd_defn(self):
|
136 | 141 |
self.scanner.expect('neighbourhood')
|
|
142 |
self.scanner.check_type('identifier')
|
137 | 143 |
id = self.scanner.consume_type('identifier')
|
138 | 144 |
n = self.neighbourhood()
|
139 | 145 |
return AST('NbhdDefn', [n], value=id)
|