46 lines
824 B
OpenEdge ABL
46 lines
824 B
OpenEdge ABL
/* 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
|
|
}
|