Website Summary Files Commits Branches @commit @diff @stats
path: root / homework / 81319 / golang2html_code_fold / parser.y
diff options
context:
space:
mode:
Commitaeb0d4f887a0c18c36b59acc7b5df08e62020c50 (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2020-10-11 21:32:48 +0300
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2020-10-11 21:33:38 +0300
Filesb6abdc6e1810326b587f2a160f39570f1f568f27 /homework/81319/golang2html_code_fold/parser.y
IPL-aeb0d4f887a0c18c36b59acc7b5df08e62020c50.tar
IPL-aeb0d4f887a0c18c36b59acc7b5df08e62020c50.tar.gz
IPL-aeb0d4f887a0c18c36b59acc7b5df08e62020c50.zip
Parent154b7cd30f21af1554ca26986ff1643e28857727 (diff)
Removed old homeworks
1 files changed, 0 insertions, 243 deletions
-rw-r--r--homework/81319/golang2html_code_fold/parser.y243
diff --git a/homework/81319/golang2html_code_fold/parser.y b/homework/81319/golang2html_code_fold/parser.y
deleted file mode 100644
index fcd4834..0000000
--- a/homework/81319/golang2html_code_fold/parser.y
+++ /dev/null
@@ -1,243 +0,0 @@
-%{
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-int yylex();
-int yyerror(const char* error);
-#define YYDEBUG 1
-
-char* concatenate(char* first, char* second) {
- int firstlen = strlen(first);
- int secondlen = strlen(second);
- char* result;
- result = malloc(firstlen + secondlen + 1);
- strcpy(result, first);
- strcat(result, second);
-
- return result;
-}
-
-void printStyles() {
- puts(
- " <style>"
- " .identifier {"
- " color: brown;"
- " }"
- " .keyword {"
- " color: #1fbfe2;"
- " }"
- " .number {"
- " color: blue;"
- " }"
- " .string {"
- " color: green;"
- " }"
- " .operator {"
- " color: #db184c;"
- " font-style: bold;"
- " }"
- " .collapsible {"
- " background-color: #777;"
- " color: white;"
- " cursor: pointer;"
- " padding: 2px;"
- " width: 2%;"
- " border: none;"
- " text-align: center;"
- " outline: none;"
- " font-size: 15px;"
- " }"
-
- " .active, .collapsible:hover {"
- " background-color: #555;"
- " }"
-
-
- " </style>"
- );
-}
-
-void printCollapsableScript() {
- puts(
- "<script>"
- "var coll = document.getElementsByClassName(\"collapsible\");\n"
- "var i;\n"
- "\n"
- "for (i = 0; i < coll.length; i++) {\n"
- "coll[i].addEventListener(\"click\", function() {\n"
- "this.classList.toggle(\"active\");\n"
- "var content = this.nextElementSibling;\n"
- "if (content.style.display === \"block\") {\n"
- "content.style.display = \"none\";\n"
- "this.innerHTML=\"+\""
- "} else {\n"
- "content.style.display = \"block\";\n"
- "this.innerHTML=\"-\""
- "}\n"
- "});\n"
- "}\n"
- "</script>"
- );
-}
-
-char* stylize(char* text, char* style) {
- char* result = concatenate("<span class=\"", style);
- result = concatenate(result, "\">");
- result = concatenate(result, text);
- result = concatenate(result, "</span>");
-
- return result;
-}
-
-char* collapsableBlock(char* text) {
- char* result = concatenate("<button class=\"collapsible\">+</button>", "<div class=\"content\">");
- result = concatenate(result, text);
- result = concatenate(result, "</div>");
-
- return result;
-}
-
-void printNumber(char* text) {
- char* style = stylize(text, "number");
- printf("%s", style);
-}
-
-
-void printIdentifier(char* text) {
- char* style = stylize(text, "identifier");
- printf("%s", style);
-}
-
-void printKeyword(char* text) {
- char* style = stylize(text, "keyword");
- printf("%s", style);
-}
-
-void printString(char* text) {
- char* style = stylize(text, "string");
- printf("%s", style);
-}
-
-void printOperator(char* text) {
- char* style = stylize(text, "operator");
- printf("%s", style);
-}
-
-void printMisc(char* text) {
- printf("%s", text);
-}
-
-void printUnrecognized(char* text) {
- printf("Unrecognized token: %s", text);
-}
-
-void printBraces(char* text) {
- printf("%s", text);
-}
-
-%}
-
-%start input
-
-
-%token NUMBER
-%token KEYWORD
-%token STRING
-%token STRING_DQ
-%token IDENTIFIER
-%token OPERATOR
-%token MISC
-%token UNRECOGNIZED
-%token LCURLY
-%token RCURLY
-
-%union {
- char* strval;
-}
-
-%type <strval> input expr_list expr token_sequence token NUMBER KEYWORD STRING STRING_DQ IDENTIFIER OPERATOR MISC UNRECOGNIZED LCURLY RCURLY
-
-
-%%
-
-input: /* empty */ { printf("empty\n"); }
- | expr_list { printf("%s", $$); }
- ;
-
-expr_list: expr expr_list { $$ = concatenate($1, $2); }
- | expr { $$ = $1; }
- ;
-
-expr: token_sequence
- | LCURLY expr_list RCURLY {
- char* collapsable = collapsableBlock($2);
- $$ = concatenate("{", collapsable);
- $$ = concatenate($$, "}");
- }
- | LCURLY RCURLY { $$ = concatenate("{", "}"); }
- ;
-
-
-token_sequence: token_sequence token { $$ = concatenate($1, $2); }
- | token { $$ = $1; }
- ;
-
-token: NUMBER { $$ = stylize($1, "number"); }
- | KEYWORD { $$ = stylize($1, "keyword"); }
- | STRING { $$ = stylize($1, "string"); }
- | STRING_DQ { $$ = stylize($1, "string"); }
- | IDENTIFIER { $$ = stylize($1, "identifier"); }
- | OPERATOR { $$ = stylize($1, "operator"); }
- | MISC { $$ = $1; }
- | UNRECOGNIZED { $$ = $1 }
- ;
-
-%%
-
-int yyerror(const char* error)
-{
- extern int current_line;
- fprintf(stderr, "input:%d: error: %s\n", current_line, error);
- return 0;
-}
-
-
-void printHtmlHeader() {
- puts(
- "<head>"
- " <title>hello_world.go</title>"
- );
- printStyles();
- puts(
- "</head>"
- );
-}
-
-
-
-void printBody() {
- puts(
- "<body bgcolor=\"#e2cdb7\">"
- " <pre class=\"code\">"
- );
- yyparse();
- puts("</pre></body>");
-}
-
-void printHTML() {
- puts(
- "<!doctype>"
- "<html>"
- );
- printHtmlHeader();
- printBody();
- printCollapsableScript();
- puts("</html>");
-}
-
-
-int main(int argc, const char* argv[])
-{
- printHTML();
- return 0;
-}