parse method
Implementation
B parse(Map<String, MethodSpec> methods, String expression) {
final tokens = expression.trim().split(RegExp(r'\s+'));
for (int i = 0; i < tokens.length;) {
final name = tokens[i];
final args = <dynamic>[];
i++;
final spec = methods[name];
if (spec == null) throw ArgumentError('Unknown method: $name');
for (int j = 0; j < spec.argCount && i < tokens.length; j++) {
final type = spec.argTypes[j];
try {
args.add(type.parse(tokens[i]));
}
catch (e) {
throw ArgumentError('Invalid argument for $name: ${tokens[i]} is not a valid ${type.name}');
}
i++;
}
if (args.length < spec.argCount) {
throw ArgumentError('Missing arguments for $name: expected ${spec.argCount}, got ${args.length}');
}
spec.apply(this, args);
}
return this as B;
}