I took a quick look into Ralf Brown's Interrupt List and the material is far too vast to be easily understood.
Please consider providing a SSCCE with sample input if you need further help.
Please be aware that the AI generated code is far from being correct or the best approach. (I only tossed two prompts at it to generate that output.)
Hints for improvement
- the Xs in your hex character class look wrong, I suppose they are only allowed at the beginning like xFF
- you can define your own named character classes
- qr snippets can have individual modifiers like qr//xi , this can improve readability a lot
- I'd enforce a clear naming convention for derived snippets with quantifiers like either trailing _opt or leading opt_ for ?
- if you want to put your quantifiers after the snippet it might be best to always explicitly put them into a non-capturing group, like (?:$quote)?
- you can also use named captures inside sub-terms, and only the matching one will show, that's far better than relying on counts like $5
- you should consider a match all clause like (?<unknown>.*) at the end of your branches, to catch errors or missing implementations (e.g a weird number where you expected a hex)
- you can embed Perl code into your snippets for debugging the current state with (?{...})
- last but not least: instead of composing one giant regex, you can also partially match smaller parts and have intermediate logic in Perl with the /c continue-modifier
Hope this helps :)
| [reply] [d/l] [select] |
I took a quick look into Ralf Brown's Interrupt List and the material is far too vast to be easily understood.
Yes, it is not for the faint of heart.
Please consider providing a SSCCE with sample input if you need further help.
The answers so far are already very satisfying.
the Xs in your hex character class look wrong, I suppose they are only allowed at the beginning like xFF
No, some MEM and @ (CALL) references do use literal Xes instead of hexits. Such as if there's references to "MEM xxxxh:xxx0h - Multiprocessor Specification - FLOATING POINTER STRUCTURE" or "CALL xxxxh:xxxxh - Alternate Multiplex Interrupt Specification TSRs"
you should consider a match all clause like (?<unknown>.*) at the end of your branches, to catch errors or missing implementations (e.g a weird number where you expected a hex)
I don't understand this. I don't want to match anything if there's no hyperlink reference in a given line. (Actually in one case I do want to know nothing was matched but it's not a problem, I just do last MATCHLINK before and if the code afterwards is run after having entered a single "link" item, I know nothing was matched.)
Thanks!
| [reply] |