I’ve started adding actions to the STEP code, targeted (at least at first) at collecting up the entity instance names in a parameter list to make it easier to analyze what’s in a STEP file.
I need to do this more often, because I spent about an hour fumbling about making stupid mistakes. And even now that I’ve got it working, I’m haunted by the notion there should be a simpler approach. Anyway, here’s what I’ve got at the moment:
class ISO_10303_21::Actions { method entity_instance_name($/) { make [~$/] } method parameter($/) { for <typed_parameter untyped_parameter omitted_parameter> -> $s { return make $/{$s}.ast if $/{$s}.defined; } } method omitted_parameter($/) { make [] } method untyped_parameter($/) { for <entity_instance_name list_of_parameters> -> $s { return make $/{$s}.ast if $/{$s}.defined; } make []; } method typed_parameter($/) { make $<parameter>.ast } method list_of_parameters($/) { make merge-arrays(@($<parameter>)».ast); } method parameter_list($/) { make merge-arrays(@($<parameter>)».ast); } }
What’s bugging me are the parameter
and untyped_parameter
definitions — those seem like they should be easier to express somehow. At least, that basic functionality is going to be pretty common.
Oh, and I just found (and fixed) a bug in the code looking at this blog post.
Feel like I had something more to say, but I’m tired and heading to bed.
October 16, 2012 at 3:46 am |
maybe:
return make $/{$_}.ast if $/{$_}.defined for ?
But yes, when you have to pass an ast up through layered tokens it starts to feel a bit icky. Maybe nodes that leave .ast undefined should get something bound there automatically.