Advent of Code: 使用状态转换器解析器优雅地解决难题

2025-04-09

Advent of Code的最新谜题需要解释`do()`和`don't()`指令,这些指令会打开或关闭`mul`指令对总和的贡献。正则表达式难以处理这种状态,因为它们识别的是无状态的正则语言。本文作者使用基于解析器的解决方案,将其提升为状态转换器,从而创建了一个有状态的解析器。这个解析器能够有效地处理`do()`、`don't()`和`mul`指令,并在0.12秒内处理大约1MB的输入,显著优于正则表达式解决方案。