Website Summary Files Commits Branches @commit @diff @stats
path: root / demo / flex / js2html.flex
diff options
context:
space:
mode:
Commit15d4746a4ec11bd92945fd7097361ccdee4684a6 (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-10-10 02:04:07 +0300
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-10-10 02:04:07 +0300
Files2148f7b60f96c158c25316a33bc752721c3d6c42 /demo/flex/js2html.flex
IPL-15d4746a4ec11bd92945fd7097361ccdee4684a6.tar
IPL-15d4746a4ec11bd92945fd7097361ccdee4684a6.tar.gz
IPL-15d4746a4ec11bd92945fd7097361ccdee4684a6.zip
Parent6b53440177222a6779e7c9315d0cb5215169de69 (diff)
added JavaScript flex based highlighter
1 files changed, 76 insertions, 0 deletions
-rw-r--r--demo/flex/js2html.flex76
diff --git a/demo/flex/js2html.flex b/demo/flex/js2html.flex
new file mode 100644
index 0000000..738895e
--- /dev/null
+++ b/demo/flex/js2html.flex
@@ -0,0 +1,76 @@
+/* scanner for a toy JavaScript-like language */
+
+%{
+%}
+
+DIGIT [0-9]
+ID [a-z_$][a-z0-9_$]*
+STRQ '([^\']|(\\\'))*'
+STRDQ "([^\"]|(\\\"))*"
+
+%%
+
+{DIGIT}+ {
+ printf("<span class=\"number\">%s</span>", yytext);
+ }
+
+{DIGIT}+"."{DIGIT}* {
+ printf("<span class=\"number\">%s</span>", yytext);
+ }
+
+if|else|for|while|do|break|switch|case|function|return|new|delete|try|throw|catch|class|public|private {
+ printf("<span class=\"keyword\">%s</span>", yytext);
+}
+
+{ID} printf("<span class=\"identifier\">%s</span>", yytext);
+{STRQ}|{STRDQ} printf("<span class=\"string\">%s</span>", yytext);
+
+"."|"+"|"-"|"*"|"/"|"="|"!"|">"|"<"|"!=="|"==="|">="|"<="|"++"|"--"|"=>" printf("<span class=\"operator\">%s</span>", yytext);
+
+[;(){}:? \t\n]+ printf("%s", yytext); /* echo the rest */
+
+. printf( "Unrecognized character: %s\n", yytext );
+
+%%
+
+int yywrap()
+{
+ return 1;
+}
+
+
+int main(int argc, const char* argv[])
+{
+ ++argv, --argc; /* skip over program name */
+ if ( argc > 0 )
+ yyin = fopen( argv[0], "r" );
+ else
+ yyin = stdin;
+
+ puts(
+ "<!doctype>"
+ "<html>"
+ "<head>"
+ " <title>hello.js</title>"
+ " <style>"
+ " .keyword {"
+ " color: red;"
+ " }"
+ " .number {"
+ " color: blue;"
+ " }"
+ " .string {"
+ " color: green;"
+ " }"
+ " .operator {"
+ " font-style: bold;"
+ " }"
+ " </style>"
+ "</head>"
+ "<body>"
+ " <pre class=\"code\">"
+ );
+ yylex();
+ puts("</pre></body></html>");
+ return 0;
+}