Website Summary Files Commits Branches @commit @diff @stats
path: root / homework / 80095 / js2html / js2html.flex
diff options
context:
space:
mode:
Commitd942fd5baffdafb2645287a5bf362fb7c120190f (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-10-10 21:46:36 +0300
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-10-10 21:52:55 +0300
Filesbbe4153a054956ff6a2b0e341e9d5af73f73374c /homework/80095/js2html/js2html.flex
IPL-d942fd5baffdafb2645287a5bf362fb7c120190f.tar
IPL-d942fd5baffdafb2645287a5bf362fb7c120190f.tar.gz
IPL-d942fd5baffdafb2645287a5bf362fb7c120190f.zip
Parenteddc31d42bce24b97e18e8ed765888af7ddbb44f (diff)
Added a sample homework
1 files changed, 77 insertions, 0 deletions
-rw-r--r--homework/80095/js2html/js2html.flex77
diff --git a/homework/80095/js2html/js2html.flex b/homework/80095/js2html/js2html.flex
new file mode 100644
index 0000000..4dfe28a
--- /dev/null
+++ b/homework/80095/js2html/js2html.flex
@@ -0,0 +1,77 @@
+/* scanner for a toy JavaScript-like language */
+
+%{
+#define YY_NO_UNISTD_H
+%}
+
+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;
+}