freenode/#clasp - IRC Chatlog
Search
14:06:00
scymtym
drmeister: your builder should not assume a particular order for MAKE-NODE calls. RELATE calls for a given LEFT node however occur in order
14:07:45
drmeister
scymtym: C1CCC1 (three-member ring) needs the two '1's to be handled differently. The first one would set a 'ring tag' and the second one will test the ring tag.
14:08:32
drmeister
Is that beyond the scope of the parser and/or the builder and should be left to the thing that runs the final code?
14:18:23
drmeister
Or I can keep track of these ring tags while parsing and then fix them up with a second pass after parsing is complete. Maybe I'll do that.
14:18:58
drmeister
esrap gives me the character position of everything - I just need to record that.
14:19:41
scymtym
drmeister: you could track that information in the parent node (if any, i don't remember) of the AST subtree
14:20:48
scymtym
when the first C1 is added, you could set a flag in the parent (or in a hash-table in the builder) to indicate that tag "1" has already occurred in the current subtree
14:29:30
scymtym
if you have some kind of pattern compilation phase after parsing, handling ring tags there sounds fine
15:10:45
scymtym
yeah, in my experience, doing too much during parsing will often cause problems later
15:12:17
drmeister
We need to recognize things like C1CCC1 where the first '1' means set-ring-tag and the subsequent ones mean 'test-ring-tag'
15:12:55
drmeister
And [$(C1CCC1),$(C1CCCC1)] must be from left to right set-ring-tag, test-ring-tag, set-ring-tag, test-ring-tag
15:13:47
drmeister
So yeah - we have to walk the tree and figure out which '1' comes first and modify that node to be a setter and not a tester.
15:14:38
drmeister
I used nonstandard syntax in our old parser C1CC[C;?1] but that is going to be eliminated.
15:15:00
drmeister
Besides this we need the colon operator to associate tags with atoms for later recovery.
15:15:52
drmeister
Those :1, :2, :3 are tests that always return true but have a side effect that associates the current atom with the tag in a separate hash table.