# # Bounded stack language for Java # BSL type finite-state trans-line typefaces r---- Java-Plain i--B- Java-Comment rb-R- Java-Package rb--- Java-Keyword rb--- Java-Datatype r---- Java-Lang r---- Java-Identifier r---- Java-Operator r---- Java-Sequencer t--Gi Java-String r--G- Java-Number t--Ri Java-Escape state set T Java-Plain C Java-Comment S Java-String H Java-String demo string public class hi char " hi\n" + 1 /* hm... */ word range a-zA-Z0-9_ rules # # Java keywords originating from C # T \{Java-Keyword}\:\:\:\:\:\:\:\:\:\:\:\:\ nop # # Java keywords originating from C++ # T \{Java-Keyword}\:\:\:\:\:\:\:\:\ nop # # Java datatypes # T \{Java-Datatype}\:\:\:\:\:\:\:\ nop # # Some Java lang package classes # T \{Java-Lang}\:\:\:\:\:\:\:\:\:\:\:\ nop T \{Java-Lang}\:\:\:\:\:\:\:\ nop T \{Java-Lang}\:\:\:\ nop # # Additional Java keywords # T \{Java-Keyword}\:\:\:\:\:\:\:\:\:\:\:\:\:\ nop T \{Java-Number}\:\ nop # # Other plain Java elements # # T \{Java-Package}package[ \t]+*; nop T \{Java-Package}import[ \t]+*; nop T \{Java-Plain}[ \t]+ nop T \{Java-Identifier}\<[a-zA-Z_][a-zA-Z0-9_]*\> nop # T \{Java-Number}0[xX][0-9a-fA-F]+:-0[xX][0-9a-fA-F]+:[\-0-9]*.[0-9]+[eE][0-9]+:[\-0-9]+.[0-9]*[eE][0-9]+:[\-0-9]+.[0-9]*:[\-0-9]*.[0-9]+:[0-9]+:-[0-9]+ nop T /\* goto C T //\{Java-Comment}*$ nop T " goto S T ' goto H T \{Java-Operator}<<=:>>=:>>>:\+\+:--:<<:>>:<=:>=:==:\!=:>=:\&\&:||:\?:->:\*=:/=:%=:\+=:-=:\&=:|=:\^=:,:=:\:|:\^:>:<:(:):\[:\]:.:-:\+:~:\!:\*:\&:/:% nop T \{Java-Sequencer};:{:} nop # # Comments. The C++ style comment prefix within a Java # comment, as well as **, are rendered as not belonging to the comment. # C \{Java-Plain}\*/ goto T C \{Java-Plain}//:\*\* nop C [^/*]+ nop # # Characters (H) and strings (S) # S \{Java-Plain}" goto T H \{Java-Plain}' goto T SH \{Java-Escape}\\[0-9][0-9][0-9]:\\x[0-9A-Fa-f][0-9A-Fa-f]:\\a:\\b:\\e:\\f:\\n:\\r:\\t:\\v:\\0 nop SH \{Java-Escape}\\\{Java-String}? nop SH $ goto T SH [^"'\\]+ nop