| /* parse C comments interactively, using events and a state machine */ |
| main() |
| state plain |
| @keypressed(key) <plain> |
| { |
| state (key == '/') slash |
| if (key != '/') |
| echo key |
| } |
| @keypressed(key) <slash> |
| { |
| state (key != '/') plain |
| state (key == '*') comment |
| echo '/' /* print '/' held back from previous state */ |
| if (key != '/') |
| echo key |
| } |
| @keypressed(key) <comment> |
| { |
| echo key |
| state (key == '*') star |
| } |
| @keypressed(key) <star> |
| { |
| echo key |
| state (key != '*') comment |
| state (key == '/') plain |
| } |
| echo(key) <plain, slash> |
| printchar key, yellow |
| echo(key) <comment, star> |
| printchar key, green |
| printchar(ch, colour) |
| { |
| setattr .foreground = colour |
| printf "%c", ch |
| } |
| |