Chi Banner

Okay, I think I’m figuring this out. When I make a filler post for the streak, it should be an unabashed filler post, so I can accumulate some of the blogging time I find each day to work on a serious post (and for doing the other important stuff I should be doing!) instead of wasting it right away.

Life. I’m programming something for Dad involving a parser using Jison, and one of the tasks involved stuffing a custom lexer into the parser. I was struggling to get my custom lexer to track locations properly. I thought this might be because I didn’t properly understand which components of which location went in which variables of the lexer, which seemed to be a plausible source of trouble since I had glanced at the sample code and it seemed to have a weird half-open range of columns and lines that I didn’t understand how to mimic in my code.

Then I looked more closely at the sample code.

In literary terms, this is called a chiasmus — the term comes from the shape of the Greek letter χ, chi — or possibly the more specific variant antimetabole. Both of these terms are courtesy of my TIL log, 2014/11/16. (Wow, it’s been a while.)

But why would you ever build an object like this?? Why???? This pattern of declarations doesn’t belong in code. It should be banned.

So, anyway, that wasn’t the issue; the issue turned out to be that neither my code nor the parser code made defensive copies of .yylloc (the l stands for “lookahead”), so my mutations leaked into the rest of the parser. Darn. It’s my fault, but I miss the functional paradigm.

(Bonus puzzle: as you might have suspected, the title and its incorporation into the narrative is quite forced. What is its significance?)

if you liked this post, click to make an invisible number go up: