I am trying to modify a list of CIL code instructions in C#. Common tasks include finding groups or patterns of instructions and replacing them with other instructions while reusing some of the information from the original match. That sounds a lot like regular expressions except that my use case is on lists of instances a specific type instead of characters in a string.
I can write some basic code to search and match stuff and replace it but I wonder if there is a more general approach with regexp syntax like “x?” or “(a|b)+” or “(a+)b*(c+)” but with a, b, c not being characters but instances of a class. Preferably with references to captured parts in the result expression. I am aware that certain patterns like ‘start of word’ or ‘whitespace’ would make no sense.
In my open source patch library Harmony, I represent the opcodes and their operands in a custom tuple type and the pattern matching should operate on an IEnumerable and in the end produce a new IEnumerable as a result.
Is there a generic pattern matching algorithm that I can extend to archive that?