I finally got around to writing classes for Fortran and Assembly source code highlighting. It was fairly easy to convert the existing Highlighter class into a base Highlighter class and a derived CppHighlighter class. Then I copied the code to produce FortranHighlighter and AsmHighlighter.
I found a collection of Fortran 20xx keywords online which I used to replace the C++ keywords in the constructor for FortranHighlighter. Fortran essentially throws away white space so keywords like "end do" become "enddo". For my convenience I generated the keywords "end", "do" and "enddo" to make it work properly. Then there was a minor bit of coding to handle Fortran comments and strings properly.
I had previously stored all the x86-64 instructions in src/assembly/instructions and this file is read into a set of strings named instructions. So I only had to change the test for keywords to be testing for a string in the set to manage keywords properly for AsmHighlighter. I had to simplify the comment code a little since Assembly comments all begin with ';' and go to the end of the line. I left the string handling as it was.
As I did previously I implemented state machines for lexical analysis using gotos. It is so easy and pretty clear when done nicely. Now I have 70 gotos in highlighter.cpp. It's a cheap thrill.
No comments:
Post a Comment