Website Summary Files Commits Branches @commit @diff @stats
path: root / homework / 81350 / parser
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/81350/parser
IPL-aeb0d4f887a0c18c36b59acc7b5df08e62020c50.tar
IPL-aeb0d4f887a0c18c36b59acc7b5df08e62020c50.tar.gz
IPL-aeb0d4f887a0c18c36b59acc7b5df08e62020c50.zip
Parent154b7cd30f21af1554ca26986ff1643e28857727 (diff)
Removed old homeworks
diff --git a/homework/81350/parser/Makefile b/homework/81350/parser/Makefile
deleted file mode 100644
index ceb9963..0000000
--- a/homework/81350/parser/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: parser
-
-parser: parser.tab.c parser.tab.h stack.c stack.h lex.yy.c
- gcc lex.yy.c parser.tab.c stack.c -lfl -o parser
-
-parser.tab.c parser.tab.h: parser.y
- bison -v -d parser.y
-
-lex.yy.c: lexer.lex parser.tab.h stack.h
- flex lexer.lex
-
-clean:
- rm -f lex.yy.c parser.tab.h parser.tab.c parser
diff --git a/homework/81350/parser/colapser/Makefile b/homework/81350/parser/colapser/Makefile
deleted file mode 100644
index ceb9963..0000000
--- a/homework/81350/parser/colapser/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: parser
-
-parser: parser.tab.c parser.tab.h stack.c stack.h lex.yy.c
- gcc lex.yy.c parser.tab.c stack.c -lfl -o parser
-
-parser.tab.c parser.tab.h: parser.y
- bison -v -d parser.y
-
-lex.yy.c: lexer.lex parser.tab.h stack.h
- flex lexer.lex
-
-clean:
- rm -f lex.yy.c parser.tab.h parser.tab.c parser
diff --git a/homework/81350/parser/colapser/README b/homework/81350/parser/colapser/README
deleted file mode 100644
index cb143ea..0000000
--- a/homework/81350/parser/colapser/README
+++ /dev/null
@@ -1,13 +0,0 @@
-Използвала съм изгледа на човека с факултетен номер 81319, затова изглежда по същия начин.
-
-За да се изпробва как действа:
-1. Трябва да се билдне:
-$ make
-
-2. Да се пусне:
-$ ./parser > <name of file>
-
-Напреимер:
-$ ./parser > output.html
-
-3. Да се отвори html файла в браузъра.
diff --git a/homework/81350/parser/colapser/input.file b/homework/81350/parser/colapser/input.file
deleted file mode 100644
index 223392d..0000000
--- a/homework/81350/parser/colapser/input.file
+++ /dev/null
@@ -1,13 +0,0 @@
-def func():
- num = 7
-
- factorial = 1
-
- if num < 0:
- print("Sorry, factorial does not exist for negative numbers")
- elif num == 0:
- print("The factorial of 0 is 1")
- else:
- for i in range(1,num + 1):
- factorial = factorial*i
- print("The factorial of",num,"is",factorial)
diff --git a/homework/81350/parser/colapser/lexer.lex b/homework/81350/parser/colapser/lexer.lex
deleted file mode 100644
index 7174494..0000000
--- a/homework/81350/parser/colapser/lexer.lex
+++ /dev/null
@@ -1,236 +0,0 @@
-
-%{
-#include "stack.h"
-#include <stdio.h>
-#include "parser.tab.h"
-
-int g_current_line_indent = 0;
-int g_is_fake_outdent_symbol = 0;
-int current_line = 0;
-int is_read_indent = 0;
-int is_preveous_unindent = 0;
-
-static const unsigned int TAB_WIDTH = 2;
-
-#define YY_USER_INIT { \
- push(0); \
- BEGIN(initial); \
- }
-
-int yycolumn = 1;
-void set_yycolumn(int val) {
- yycolumn = val;
- yylloc.first_column = yycolumn;
- yylloc.last_column = yycolumn + yyleng - 1;
-}
-
-#define YY_USER_ACTION { \
- yylloc.first_line = yylloc.last_line = yylineno; \
- set_yycolumn(yycolumn); \
- yycolumn += yyleng; \
-}
-
-char* fixed_unindent(char* text){
- char* add_new_line = "";
- if(is_preveous_unindent){
- add_new_line ="<br>";
- is_preveous_unindent = 0;
- }
- return concatenate(add_new_line, text);
-}
-
-%}
-
- /* This is a sub-parser (state) for indentation-sensitive scoping */
-%x initial
-%x indent
-%s normal
-
- /* %option 8bit reentrant bison-bridge */
-%option warn
-%option nodefault
-%option yylineno
-%option noyywrap
-
-
-digit [0-9]
-number [1-9]{digit}*
-fnumber {digit}+"."{digit}*
-letter [a-zA-Z_]
-stringdq \"([^\"]|(\\\"))*\"
-stringsq \'([^\']|(\\\'))*\'
-
- /*%option debug*/
-%%
- int indent_caller = normal;
-
-
-<*>\n { set_yycolumn(0); yylineno--; REJECT; }
-
-
-<initial>. { set_yycolumn(yycolumn-1); indent_caller = normal; yyless(0); BEGIN(indent); }
-<initial>\n { indent_caller = normal; yyless(0); BEGIN(indent); }
-
- /* The following are the rules that keep track of indentation. */
-<indent>" " { g_current_line_indent++; }
-<indent>\t { g_current_line_indent = (g_current_line_indent + TAB_WIDTH) & ~(TAB_WIDTH-1); }
-<indent>\n { g_current_line_indent = 0; /* ignoring blank line */ }
-<indent><<EOF>> {
- if(peek() != 0) {
- pop();
-
- if(g_current_line_indent != peek()) {
- unput('\n');
- for(size_t i = 0 ; i < peek() ; ++i) {
- unput(' ');
- }
- } else {
- BEGIN(indent_caller);
- }
-
- return UNINDENT;
- } else {
- yyterminate();
- }
- }
-
-<indent>. {
- // if(!g_is_fake_outdent_symbol) {
- unput(*yytext);
- // }
- set_yycolumn(yycolumn-1);
- g_is_fake_outdent_symbol = 0;
-
-
- if(g_current_line_indent > peek()) {
- push(g_current_line_indent);
- BEGIN(indent_caller);
- return INDENT;
- } else if(g_current_line_indent < peek()) {
- pop();
-
- if(g_current_line_indent != peek()) {
- for(size_t i = 0 ; i < g_current_line_indent ; ++i) {
- unput(' ');
- }
- unput('\n');
-
- unput('$');
-
- g_is_fake_outdent_symbol = 1;
- for(size_t i = 0 ; i < peek() ; ++i) {
- unput(' ');
- }
- unput('\n');
- } else {
-
- BEGIN(indent_caller);
- }
- is_preveous_unindent = 1;
- return UNINDENT;
- } else {
- BEGIN(indent_caller);
- }
- }
-<normal>" " { yylval.lexeme = " ";}
-<normal>\n { g_current_line_indent = 0; indent_caller = YY_START; BEGIN(indent); yylval.lexeme = "<br>"; return NEWLINE; }
-
-<normal>{number}|{fnumber} { yylval.lexeme = fixed_unindent(yytext); return NUMBER; }
-<normal>{digit} { yylval.lexeme = fixed_unindent(yytext); return NUMBER;}
-<normal>{stringsq} { yylval.lexeme = fixed_unindent(yytext); return STRING;}
-<normal>{stringdq} { yylval.lexeme = fixed_unindent(yytext); return STRING;}
-
-<normal>"+" { yylval.lexeme = fixed_unindent(yytext); return PLUS; }
-<normal>"-" { yylval.lexeme = fixed_unindent(yytext); return MINUS; }
-<normal>"*" { yylval.lexeme = fixed_unindent(yytext); return STAR; }
-<normal>"/" { yylval.lexeme = fixed_unindent(yytext); return SLASH; }
-<normal>"//" { yylval.lexeme = fixed_unindent(yytext); return DOUBLESLASH;}
-<normal>"%" { yylval.lexeme = fixed_unindent(yytext); return PERCENT; }
-<normal>"**" { yylval.lexeme = fixed_unindent(yytext); return DOUBLESTAR; }
-<normal>">" { yylval.lexeme = fixed_unindent(yytext); return BIGGER; }
-<normal>"<" { yylval.lexeme = fixed_unindent(yytext); return LESS; }
-<normal>">=" { yylval.lexeme = fixed_unindent(yytext); return BIGGEREQL; }
-<normal>"<=" { yylval.lexeme = fixed_unindent(yytext); return LESSEQL; }
-<normal>"==" { yylval.lexeme = fixed_unindent(yytext); return EQL; }
-<normal>"!=" { yylval.lexeme = fixed_unindent(yytext); return NOTEQL; }
-
-
-<normal>"&" { yylval.lexeme = fixed_unindent(yytext); return BOOLAND; }
-<normal>"|" { yylval.lexeme = fixed_unindent(yytext); return BOOLOR; }
-<normal>"~" { yylval.lexeme = fixed_unindent(yytext); return TILDA; }
-<normal>"^" { yylval.lexeme = fixed_unindent(yytext); return HAT; }
-<normal>">>" { yylval.lexeme = fixed_unindent(yytext); return SHIFTRIGHT; }
-<normal>"<<" { yylval.lexeme = fixed_unindent(yytext); return SHIFTLESS; }
-
-
-<normal>"=" { yylval.lexeme = fixed_unindent(yytext); return ASSIGN; }
-<normal>"+=" { yylval.lexeme = fixed_unindent(yytext); return PLUSASSIGN; }
-<normal>"-=" { yylval.lexeme = fixed_unindent(yytext); return MINUSASSIGN;}
-<normal>"*=" { yylval.lexeme = fixed_unindent(yytext); return STARASSIGN; }
-<normal>"/=" { yylval.lexeme = fixed_unindent(yytext); return SLASHASSIGN;}
-<normal>"%=" { yylval.lexeme = fixed_unindent(yytext); return PERCENTASSIGN;}
-<normal>"**=" { yylval.lexeme = fixed_unindent(yytext); return DOUBLESTARASSIGN;}
-<normal>"//=" { yylval.lexeme = fixed_unindent(yytext); return DOUBLESLASHASSIGN;}
-<normal>"^=" { yylval.lexeme = fixed_unindent(yytext); return HATASSIGN;}
-<normal>"&=" { yylval.lexeme = fixed_unindent(yytext); return BOOLANDASSIGN;}
-<normal>"|=" { yylval.lexeme = fixed_unindent(yytext); return BOOLORASSIGN;}
-<normal>">>=" { yylval.lexeme = fixed_unindent(yytext); return SHIFTRIGHTASSIGN;}
-<normal>"<<=" { yylval.lexeme = fixed_unindent(yytext); return SHIFTLEFTASSIGN;}
-<normal>"@=" { yylval.lexeme = fixed_unindent(yytext); return ATASSIGN; }
-
-<normal>"@" { yylval.lexeme = fixed_unindent(yytext); return AT;}
-<normal>"(" { yylval.lexeme = fixed_unindent(yytext); return LPAREN; }
-<normal>")" { yylval.lexeme = fixed_unindent(yytext); return RPAREN; }
-<normal>"[" { yylval.lexeme = fixed_unindent(yytext); return LSQPAREN;}
-<normal>"]" { yylval.lexeme = fixed_unindent(yytext); return RSQPAREN;}
-<normal>"{" { yylval.lexeme = fixed_unindent(yytext); return LCURPAREN;}
-<normal>"}" { yylval.lexeme = fixed_unindent(yytext); return RCURPAREN;}
-<normal>";" { yylval.lexeme = fixed_unindent(yytext); return SEMICOLON; }
-<normal>":" { yylval.lexeme = fixed_unindent(yytext); return COLON; }
-<normal>"," { yylval.lexeme = fixed_unindent(yytext); return COMMA; }
-<normal>"." { yylval.lexeme = fixed_unindent(yytext); return DOT; }
-<normal>"..." { yylval.lexeme = fixed_unindent(yytext); return THREEDOTS;}
-
-<normal>"$" { return DOLAR; }
-
-<normal>"async" { yylval.lexeme = fixed_unindent(yytext); return ASYNC;}
-<normal>"def" { yylval.lexeme = fixed_unindent(yytext); return DEF; }
-<normal>"and" { yylval.lexeme = fixed_unindent(yytext); return AND;}
-<normal>"or" { yylval.lexeme = fixed_unindent(yytext); return OR;}
-<normal>"not" { yylval.lexeme = fixed_unindent(yytext); return NOT;}
-<normal>"in" { yylval.lexeme = fixed_unindent(yytext); return IN;}
-<normal>"not in" { yylval.lexeme = fixed_unindent(yytext); return NOTIN;}
-<normal>"is" { yylval.lexeme = fixed_unindent(yytext); return IS;}
-<normal>"is not" { yylval.lexeme = fixed_unindent(yytext); return ISNOT;}
-<normal>"await" { yylval.lexeme = fixed_unindent(yytext); return AWAIT;}
-<normal>"None" { yylval.lexeme = fixed_unindent(yytext); return NONE;}
-<normal>"True" { yylval.lexeme = fixed_unindent(yytext); return TRUE;}
-<normal>"False" { yylval.lexeme = fixed_unindent(yytext); return FALSE;}
-<normal>"class" { yylval.lexeme = fixed_unindent(yytext); return CLASS;}
-<normal>"for" { yylval.lexeme = fixed_unindent(yytext); return FOR;}
-<normal>"if" { yylval.lexeme = fixed_unindent(yytext); return IF;}
-<normal>"elif" { yylval.lexeme = fixed_unindent(yytext); return ELIF;}
-<normal>"else" { yylval.lexeme = fixed_unindent(yytext); return ELSE;}
-<normal>"except" { yylval.lexeme = fixed_unindent(yytext); return EXCEPT;}
-<normal>"from" { yylval.lexeme = fixed_unindent(yytext); return FROM;}
-<normal>"finally" { yylval.lexeme = fixed_unindent(yytext); return FINALLY;}
-<normal>"lambda" { yylval.lexeme = fixed_unindent(yytext); return LAMBDA;}
-<normal>"yield" { yylval.lexeme = fixed_unindent(yytext); return YIELD;}
-<normal>"as" { yylval.lexeme = fixed_unindent(yytext); return AS;}
-<normal>"assert" { yylval.lexeme = fixed_unindent(yytext); return ASSERT;}
-<normal>"break" { yylval.lexeme = fixed_unindent(yytext); return BREAK;}
-<normal>"continue" { yylval.lexeme = fixed_unindent(yytext); return CONTINUE;}
-<normal>"del" { yylval.lexeme = fixed_unindent(yytext); return DEL;}
-<normal>"global" { yylval.lexeme = fixed_unindent(yytext); return GLOBAL;}
-<normal>"import" { yylval.lexeme = fixed_unindent(yytext); return IMPORT;}
-<normal>"nonlocal" { yylval.lexeme = fixed_unindent(yytext); return NONLOCAL;}
-<normal>"pass" { yylval.lexeme = fixed_unindent(yytext); return PASS;}
-<normal>"raise" { yylval.lexeme = fixed_unindent(yytext); return RAISE;}
-<normal>"return" { yylval.lexeme = fixed_unindent(yytext); return RETURN;}
-<normal>"try" { yylval.lexeme = fixed_unindent(yytext); return TRY;}
-<normal>"while" { yylval.lexeme = fixed_unindent(yytext); return WHILE;}
-<normal>"with" { yylval.lexeme = fixed_unindent(yytext); return WITH;}
-
-<normal>{letter}({letter}|{digit})* {
- yylval.lexeme = fixed_unindent(yytext); return NAME; }
-%%
diff --git a/homework/81350/parser/colapser/parser.y b/homework/81350/parser/colapser/parser.y
deleted file mode 100644
index 030ae64..0000000
--- a/homework/81350/parser/colapser/parser.y
+++ /dev/null
@@ -1,1107 +0,0 @@
-
-%{
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "stack.h"
-int yylex();
-int yyerror(const char* error);
-FILE *yyin;
-#undef YYDEBUG
-#define YYDEBUG 1
-/* #define YY_DECL int yylex(scanner) void* scanner; */
-
-
-
- char* concatenate3(char* first, char* second, char* third){
- char* result1 = concatenate(first, second);
- char* result2 = concatenate(result1, third);
- }
-
- void printStyles() {
- puts(
- " <style>"
- " .identifier {"
- " color: black;"
- " }"
- " .keyword {"
- " color: purple;"
- " }"
- " .number {"
- " color: blue;"
- " }"
- " .string {"
- " color: green;"
- " }"
- " .operator {"
- " color: #db184c;"
- " font-style: bold;"
- " .constant {"
- " color: purple;"
- " }"
- " .collapsible {"
- " color: white;"
- " cursor: pointer;"
- " padding: 2px;"
- " width: 2%;"
- " border: none;"
- " text-align: center;"
- " outline: none;"
- " font-size: 15px;"
- " }"
- " </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 === \"inline\") {\n"
- "content.style.display = \"none\";\n"
- "this.innerHTML=\"+\""
- "} else {\n"
- "content.style.display = \"inline\";\n"
- "this.innerHTML=\"-\""
- "}\n"
- "});\n"
- "}\n"
- "for (i = 0; i < coll.length; i++) {\n"
- "coll[i].click()\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 *str_replace(char *orig, char *rep, char *with) {
- char *result;
- char *ins;
- char *tmp;
- int len_rep;
- int len_with;
- int len_front;
- int count;
-
- if (!orig || !rep)
- return NULL;
- len_rep = strlen(rep);
- if (len_rep == 0)
- return NULL;
- if (!with)
- with = "";
- len_with = strlen(with);
-
- // count the number of replacements needed
- ins = orig;
- for (count = 0; tmp = strstr(ins, rep); ++count) {
- ins = tmp + len_rep;
- }
-
- tmp = result = malloc(strlen(orig) + (len_with - len_rep) * count + 1);
-
- if (!result)
- return NULL;
-
- while (count--) {
- ins = strstr(orig, rep);
- len_front = ins - orig;
- tmp = strncpy(tmp, orig, len_front) + len_front;
- tmp = strcpy(tmp, with) + len_with;
- orig += len_front + len_rep; // move to next "end of rep"
- }
- strcpy(tmp, orig);
- return result;
- }
-
- char* collapsableBlock(char* text) {
- int len = strlen(text);
- if(len>4 && text[len-1] == '>' && text[len-2] == 'r' && text[len-3] == 'b' && text[len-4] == '<'){
- text[len-4] = '\0';
- }
- char* result = concatenate("<button class=\"collapsible\">+</button>", "<div class=\"content\">");
- char* new_text = str_replace(text, "<br>", "<br>&nbsp&nbsp");
- result = concatenate(result, new_text);
- result = concatenate(result, "</div>");
- return result;
- }
-
-%}
-
-%start input_stmt
-/* %define api.pure full */
-%define api.value.type {union name {char* lexeme;}}
-%locations
-
-%type<lexeme> NUMBER PLUS MINUS STAR SLASH DOUBLESLASH PERCENT DOUBLESTAR BIGGER
-%type<lexeme> LESS BIGGEREQL LESSEQL EQL NOTEQL
-%type<lexeme> BOOLAND BOOLOR TILDA HAT SHIFTRIGHT SHIFTLESS
-%type<lexeme> ASSIGN PLUSASSIGN MINUSASSIGN STARASSIGN SLASHASSIGN PERCENTASSIGN
-%type<lexeme> DOUBLESTARASSIGN DOUBLESLASHASSIGN HATASSIGN BOOLANDASSIGN
-%type<lexeme> BOOLORASSIGN SHIFTRIGHTASSIGN SHIFTLEFTASSIGN ATASSIGN
-%type<lexeme> LPAREN RPAREN LSQPAREN RSQPAREN LCURPAREN RCURPAREN SEMICOLON
-%type<lexeme> COLON COMMA DOT AT THREEDOTS NAME
-%type<lexeme> DEF ASYNC AND OR NOT IN NOTIN IS ISNOT AWAIT NONE TRUE FALSE FOR
-%type<lexeme> IF ELIF ELSE EXCEPT CLASS FROM FINALLY LAMBDA YIELD AS ASSERT
-%type<lexeme> BREAK CONTINUE DEL GLOBAL IMPORT NONLOCAL PASS RAISE RETURN TRY WHILE WITH
-%type<lexeme> INDENT UNINDENT NEWLINE STRING
-%type<lexeme> input_stmt decorator decorator_more decorated obj_definition async_funcdef funcdef parameters typedargslist td_one td_one_arg td_more_arg td_one_optional td_two td_two_optional td_three tfpdef varargslist var_one var_one_arg var_more_arg var_one_optional var_two var_two_optional var_three vfpdef stmt simple_stmt simple_more_stmt small_stmt expr_stmt expr_stmt_two assign_more assign_expr aug_expr annassign testlist_star_expr testlist_se testlist_star_expr_more augassign del_stmt pass_stmt flow_stmt break_stmt continue_stmt return_stmt yield_stmt raise_stmt import_stmt import_name import_from import_from_name dots dots_more import_from_import import_as_name dotted_as_name import_as_names import_as_name_more dotted_as_names dotted_as_name_more dotted_name dotted_name_more global_stmt global_stmt_more nonlocal_stmt nonlocal_stmt_more assert_stmt compound_stmt async_stmt if_stmt elif_stmt else_stmt elif_stmt_more while_stmt for_stmt try_stmt try_stmt_two finally_stmt except_fin_stmt except_stmt_more except_stmt except_clause with_stmt with_item with_item_more suite stmt_more test test_nocond lambdadef lambdadef_nocond or_test or_test_more and_test and_test_more not_test comparison comp_more comp_op star_expr expr expr_more xor_expr xor_expr_more and_expr and_expr_more shift_expr shift_expr_more shift_op arith_expr arith_expr_more arith_op term term_more term_op factor unar_op power atom_expr atom testlist_comp testlist_comp_second testlist_more_arg trailer trailer_more subscriptlist subscipt_more subscript sliceop exprlist exprlist_more exprlist_op testlist testlist_more dictorsetmaker test_star_expr dsm_one test_star_expr_more test_star_expr_2 dsm_two test_star_expr_2_more classdef arglist arglist_more argument comp_iter sync_comp_for comp_for comp_if yield_expr yield_arg
-
-
-
-%token NUMBER
-%token PLUS
-%token MINUS
-%token STAR
-%token SLASH
-%token DOUBLESLASH
-%token PERCENT
-%token DOUBLESTAR
-%token BIGGER
-%token LESS
-%token BIGGEREQL
-%token LESSEQL
-%token EQL
-%token NOTEQL
-
-%token BOOLAND
-%token BOOLOR
-%token TILDA
-%token HAT
-%token SHIFTRIGHT
-%token SHIFTLESS
-
-%token ASSIGN
-%token PLUSASSIGN
-%token MINUSASSIGN
-%token STARASSIGN
-%token SLASHASSIGN
-%token PERCENTASSIGN
-%token DOUBLESTARASSIGN
-%token DOUBLESLASHASSIGN
-%token HATASSIGN
-%token BOOLANDASSIGN
-%token BOOLORASSIGN
-%token SHIFTRIGHTASSIGN
-%token SHIFTLEFTASSIGN
-%token ATASSIGN
-
-%token LPAREN
-%token RPAREN
-%token LSQPAREN
-%token RSQPAREN
-%token LCURPAREN
-%token RCURPAREN
-%token SEMICOLON
-%token COLON
-%token COMMA
-%token DOT
-%token AT
-%token THREEDOTS
-
-%token NAME
-
-%token DEF
-%token ASYNC
-%token AND
-%token OR
-%token NOT
-%token IN
-%token NOTIN
-%token IS
-%token ISNOT
-%token AWAIT
-%token NONE
-%token TRUE
-%token FALSE
-%token FOR
-%token IF
-%token ELIF
-%token ELSE
-%token EXCEPT
-%token CLASS
-%token FROM
-%token FINALLY
-%token LAMBDA
-%token YIELD
-%token AS
-%token ASSERT
-%token BREAK
-%token CONTINUE
-%token DEL
-%token GLOBAL
-%token IMPORT
-%token NONLOCAL
-%token PASS
-%token RAISE
-%token RETURN
-%token TRY
-%token WHILE
-%token WITH
-
-%token INDENT
-%token UNINDENT
-%token NEWLINE
-%token EOFILE
-%token STRING
-%token DOLAR
-
-/*
-Define both - precedence and associativity */
-%left PLUS MINUS
-%left STAR SLASH
-
-%%
-
-input_stmt: NEWLINE { printf("\n");}
- | simple_stmt { printf("%s", $$);}
- | compound_stmt NEWLINE { printf("%s\n", $$);}
- | compound_stmt { printf("%s", $$);}
-
-
-decorator: AT dotted_name NEWLINE {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, "\n");
- }
- | AT dotted_name LPAREN RPAREN NEWLINE {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, "\n");
- }
- | AT dotted_name LPAREN arglist RPAREN NEWLINE {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- $$ = concatenate($$, "\n");
- }
-decorator_more: decorator { $$ = $1; }
- | decorator_more decorator { $$ = concatenate($1, $2);}
-decorated: decorator_more obj_definition { $$ = concatenate($1, $2);}
-obj_definition: classdef { $$ = $1; }
- | funcdef { $$ = $1; }
- | async_funcdef { $$ = $1; }
-
-/* gotovo do tuk */
-
-async_funcdef: ASYNC funcdef { $$ = concatenate(stylize($1, "keyword"), $2);}
-funcdef: DEF NAME parameters COLON suite {
- $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- }
-parameters: LPAREN RPAREN { $$ = concatenate($1, $2);}
- | LPAREN typedargslist RPAREN {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-
-typedargslist: td_one { $$ = $1; }
- | td_two { $$ = $1; }
- | td_three { $$ = $1; }
-td_one: td_one_arg td_more_arg td_one_optional {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | td_one_arg td_one_optional { $$ = concatenate($1, $2);}
-td_one_arg: tfpdef ASSIGN test {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
- | tfpdef { $$ = $1; }
-td_more_arg: COMMA td_one_arg { $$ = concatenate($1, $2);}
- | td_more_arg COMMA td_one_arg {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-td_one_optional: COMMA td_two { $$ = concatenate($1, $2);}
- | COMMA td_three { $$ = concatenate($1, $2);}
- | COMMA { $$ = $1; }
- | { $$ = ""; }
-td_two: STAR tfpdef td_more_arg td_two_optional {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
- | STAR td_more_arg td_two_optional {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- }
-td_two_optional: COMMA td_three { $$ = concatenate($1, $2);}
- | COMMA { $$ = $1; }
-td_three: DOUBLESTAR tfpdef COMMA {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- }
- | DOUBLESTAR tfpdef { $$ = concatenate(stylize($1, "operator"), $2);}
-tfpdef: NAME { $$ = $1; }
- | NAME COLON test {
- $$ = concatenate(stylize($1, "identifier"), $2);
- $$ = concatenate($$, $3);
- }
-
-varargslist: var_one { $$ = $1; }
- | var_two { $$ = $1; }
- | var_three { $$ = $1; }
-var_one: var_one_arg var_more_arg var_one_optional {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | var_one_arg var_one_optional { $$ = concatenate($1, $2);}
-var_one_arg: vfpdef ASSIGN test {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
- | vfpdef { $$ = $1; }
-var_more_arg: COMMA var_one_arg { $$ = concatenate($1, $2);}
- | var_more_arg COMMA var_one_arg {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-var_one_optional: COMMA var_two { $$ = concatenate($1, $2);}
- | COMMA var_three { $$ = concatenate($1, $2);}
- | COMMA { $$ = $1; }
-var_two: STAR vfpdef var_more_arg var_two_optional {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
- | STAR var_more_arg var_two_optional {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- }
-var_two_optional: COMMA var_three { $$ = concatenate($1, $2);}
- | COMMA { $$ = $1; }
-var_three: DOUBLESTAR vfpdef COMMA {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- }
- | DOUBLESTAR vfpdef { $$ = concatenate(stylize($1, "operator"), $2);}
-vfpdef: NAME { $$ = stylize($1, "identifier"); }
-
-/* do tuk e gotovo */
-
-stmt: simple_stmt { $$ = $1; }
- | compound_stmt { $$ = $1; }
-simple_stmt: small_stmt simple_more_stmt SEMICOLON NEWLINE {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, "<br>");
- }
- | small_stmt simple_more_stmt NEWLINE {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, "<br>");
- }
- | small_stmt NEWLINE { $$ = concatenate($1, "<br>");}
- | small_stmt SEMICOLON NEWLINE {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, "<br>");
- }
-simple_more_stmt: SEMICOLON small_stmt { $$ = concatenate($1, $2);}
- | simple_more_stmt SEMICOLON small_stmt {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-small_stmt: expr_stmt { $$ = $1; }
- | del_stmt { $$ = $1; }
- | pass_stmt { $$ = $1; }
- | flow_stmt { $$ = $1; }
- | import_stmt { $$ = $1; }
- | global_stmt { $$ = $1; }
- | nonlocal_stmt { $$ = $1; }
- | assert_stmt { $$ = $1; }
-expr_stmt: testlist_star_expr expr_stmt_two { $$ = concatenate($1, $2);}
- | testlist_star_expr { $$ = $1; }
-expr_stmt_two: annassign { $$ = $1; }
- | augassign aug_expr { $$ = concatenate($1, $2);}
- | assign_more { $$ = $1; }
-assign_more: ASSIGN assign_expr { $$ = concatenate(stylize($1, "operator"), $2);}
- | assign_more ASSIGN assign_expr {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
-assign_expr: yield_expr { $$ = $1; }
- | testlist_star_expr { $$ = $1; }
-aug_expr: yield_expr { $$ = $1; }
- | testlist { $$ = $1; }
-annassign: COLON test { $$ = concatenate($1, $2);}
- | COLON test ASSIGN test {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, stylize($3, "operator"));
- $$ = concatenate($$, $4);
- }
-testlist_star_expr: testlist_se testlist_star_expr_more COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | testlist_se testlist_star_expr_more { $$ = concatenate($1, $2);}
- | testlist_se COMMA { $$ = concatenate($1, $2);}
- | testlist_se { $$ = $1; }
-testlist_se: test { $$ = $1; }
- | star_expr { $$ = $1; }
-testlist_star_expr_more: COMMA testlist_se { $$ = concatenate($1, $2);}
- | testlist_star_expr_more COMMA testlist_se {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-augassign: PLUSASSIGN { $$ = stylize($1, "operator");}
- | MINUSASSIGN { $$ = stylize($1, "operator");}
- | STARASSIGN { $$ = stylize($1, "operator");}
- | ATASSIGN { $$ = stylize($1, "operator");}
- | SLASHASSIGN { $$ = stylize($1, "operator");}
- | PERCENTASSIGN { $$ = stylize($1, "operator");}
- | BOOLANDASSIGN { $$ = stylize($1, "operator");}
- | BOOLORASSIGN { $$ = stylize($1, "operator");}
- | HATASSIGN { $$ = stylize($1, "operator");}
- | SHIFTLEFTASSIGN { $$ = stylize($1, "operator");}
- | SHIFTRIGHTASSIGN { $$ = stylize($1, "operator");}
- | DOUBLESTARASSIGN { $$ = stylize($1, "operator");}
- | DOUBLESLASHASSIGN { $$ = stylize($1, "operator");}
-
-del_stmt: DEL exprlist { $$ = concatenate(stylize($1, "keyword"), $2);}
-pass_stmt: PASS { $$ = stylize($1, "keyword");}
-flow_stmt: break_stmt { $$ = $1; }
- | continue_stmt { $$ = $1; }
- | return_stmt { $$ = $1; }
- | raise_stmt { $$ = $1; }
- | yield_stmt { $$ = $1; }
-break_stmt: BREAK { $$ = stylize($1, "keyword");}
-continue_stmt: CONTINUE { $$ = stylize($1, "keyword");}
-return_stmt: RETURN { $$ = stylize($1, "keyword");}
- | RETURN testlist { $$ = concatenate(stylize($1, "keyword"), $2);}
-yield_stmt: yield_expr { $$ = $1; }
-raise_stmt: RAISE { $$ = stylize($1, "keyword");}
- | RAISE test { $$ = concatenate(stylize($1, "keyword"), $2);}
- | RAISE test FROM test {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, stylize($3, "keyword"));
- $$ = concatenate($$, $4);
- }
-import_stmt: import_name { $$ = $1; }
- | import_from { $$ = $1; }
-import_name: IMPORT dotted_as_names { $$ = concatenate(stylize($1, "keyword"), $2);}
-import_from: FROM import_from_name IMPORT import_from_import {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, stylize($3, "keyword"));
- $$ = concatenate($$, $4);
- }
-import_from_name: dotted_name { $$ = $1; }
- | dots_more dotted_name { $$ = concatenate($1, $2);}
- | dots_more { $$ = $1; }
-dots: DOT { $$ = $1; }
- | THREEDOTS { $$ = $1; }
-dots_more: dots { $$ = $1; }
- | dots_more dots { $$ = concatenate($1, $2);}
-import_from_import: STAR { $$ = stylize($1, "operator");}
- | LPAREN import_as_names RPAREN {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | import_as_names { $$ = $1; }
-import_as_name: NAME { $$ = stylize($1, "identifier");}
- | NAME AS NAME {
- $$ = concatenate(stylize($1, "identifier"), stylize($2, "operator"));
- $$ = concatenate($$, stylize($3, "identifier"));
- }
-dotted_as_name: dotted_name { $$ = $1; }
- | dotted_name AS NAME {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, stylize($3, "identifier"));
- }
-import_as_names: import_as_name COMMA { $$ = concatenate($1, $2);}
- | import_as_name { $$ = $1; }
- | import_as_name import_as_name_more COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | import_as_name import_as_name_more { $$ = concatenate($1, $2);}
-import_as_name_more: COMMA import_as_name { $$ = concatenate($1, $2);}
- | import_as_name_more COMMA import_as_name {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-dotted_as_names: dotted_as_name { $$ = $1; }
- | dotted_as_name dotted_as_name_more { $$ = concatenate($1, $2);}
-dotted_as_name_more: COMMA dotted_as_name { $$ = concatenate($1, $2);}
- | dotted_as_name_more COMMA dotted_as_name {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-dotted_name: NAME { $$ = stylize($1, "identifier");}
- | NAME dotted_name_more { $$ = concatenate(stylize($1, "identifier"), $2);}
-dotted_name_more: DOT NAME { $$ = concatenate($1, stylize($2, "identifier"));}
- | dotted_name_more DOT NAME {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, stylize($3, "identifier"));
- }
-global_stmt: GLOBAL NAME { $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));}
- | GLOBAL NAME global_stmt_more {
- $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));
- $$ = concatenate($$, $3);
- }
-global_stmt_more: COMMA NAME { $$ = concatenate($1, stylize($2, "identifier"));}
- | global_stmt_more COMMA NAME {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, stylize($3, "identifier"));
- }
-nonlocal_stmt: NONLOCAL NAME { $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));}
- | NONLOCAL NAME nonlocal_stmt_more {
- $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));
- $$ = concatenate($$, $3);
- }
-nonlocal_stmt_more: COMMA NAME { $$ = concatenate($1, stylize($2, "identifier"));}
- | nonlocal_stmt_more COMMA NAME {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, stylize($3, "identifier"));;
- }
-assert_stmt: ASSERT test { $$ = concatenate(stylize($1, "keyword"), $2);}
- | ASSERT COMMA test {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- }
-
-compound_stmt: if_stmt { $$ = $1; }
- | while_stmt { $$ = $1; }
- | for_stmt { $$ = $1; }
- | try_stmt { $$ = $1; }
- | with_stmt { $$ = $1; }
- | funcdef { $$ = $1; }
- | classdef { $$ = $1; }
- | decorated { $$ = $1; }
- | async_stmt { $$ = $1; }
-async_stmt: ASYNC funcdef { $$ = concatenate(stylize($1, "keyword"), $2);}
- | ASYNC with_stmt { $$ = concatenate(stylize($1, "keyword"), $2);}
- | ASYNC for_stmt { $$ = concatenate(stylize($1, "keyword"), $2);}
-
-if_stmt: IF test COLON suite elif_stmt_more else_stmt {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- $$ = concatenate($$, $6);
- }
- | IF test COLON suite elif_stmt_more {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- }
- | IF test COLON suite else_stmt {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- }
- | IF test COLON suite {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
-elif_stmt: ELIF test COLON suite {
- $$ = $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
-else_stmt: ELSE COLON suite {
- $$ = $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- }
-elif_stmt_more: elif_stmt { $$ = $1; }
- | elif_stmt_more elif_stmt { $$ = concatenate($1, $2);}
-
-while_stmt: WHILE test COLON suite {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
- | WHILE test COLON suite else_stmt {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- }
-
-for_stmt: FOR exprlist IN testlist COLON suite {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, stylize($3, "operator"));
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- $$ = concatenate($$, $6);
- }
- | FOR exprlist IN testlist COLON suite else_stmt {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, stylize($3, "operator"));
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- $$ = concatenate($$, $6);
- $$ = concatenate($$, $7);
- }
-
-try_stmt: TRY COLON suite try_stmt_two {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
-try_stmt_two: except_fin_stmt { $$ = $1; }
- | finally_stmt { $$ = $1; }
-finally_stmt: FINALLY COLON suite {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- }
-except_fin_stmt: except_stmt_more { $$ = $1; }
- | except_stmt_more else_stmt { $$ = concatenate($1, $2);}
- | except_stmt_more finally_stmt { $$ = concatenate($1, $2);}
- | except_stmt_more else_stmt finally_stmt {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-except_stmt_more: except_stmt { $$ = $1; }
- | except_stmt_more except_stmt { $$ = concatenate($1, $2);}
-except_stmt: except_clause COLON suite {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-except_clause: EXCEPT { $$ = stylize($1, "keyword"); }
- | EXCEPT test { $$ = concatenate(stylize($1, "keyword"), $2);}
- | EXCEPT test AS NAME {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, stylize($3, "operator"));
- $$ = concatenate($$, stylize($4, "identifier"));
- }
-with_stmt: WITH with_item with_item_more COLON suite {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- }
- | WITH with_item COLON suite {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
-with_item: test { $$ = $1; }
- | test AS expr {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
-with_item_more: COMMA with_item { $$ = concatenate($1, $2);}
- | with_item_more COMMA with_item {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-suite: simple_stmt { $$ = $1; }
- | NEWLINE INDENT stmt_more UNINDENT {
- $$ = concatenate("<br>", $2);
- $$ = concatenate($2, $3);
- $$ = concatenate($$, "");
- /* $$ = concatenate($$, $4); */
- $$ = collapsableBlock($$);
- }
-stmt_more: stmt { $$ = $1; }
- | stmt_more stmt { $$ = concatenate($1, $2);}
-
-
-test: or_test { $$ = $1; }
- | or_test IF or_test ELSE test {
- $$ = concatenate($1, stylize($2, "keyword"));
- $$ = concatenate($$, $3);
- $$ = concatenate($$, stylize($4, "keyword"));
- $$ = concatenate($$, $5);
- }
- | lambdadef { $$ = $1; }
-test_nocond: or_test { $$ = $1; }
- | lambdadef_nocond { $$ = $1; }
-lambdadef: LAMBDA COLON test {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- }
- | LAMBDA varargslist COLON test {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
-lambdadef_nocond: LAMBDA COLON test_nocond {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- }
- | LAMBDA varargslist COLON test {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
-or_test: and_test or_test_more { $$ = concatenate($1, $2);}
-or_test_more: OR and_test or_test_more {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- }
- | { $$ = ""; }
-and_test: not_test and_test_more { $$ = concatenate($1, $2);}
-and_test_more: AND not_test and_test_more {
- $$ = concatenate(stylize($1, "operator"), $2);
- $$ = concatenate($$, $3);
- }
- | { $$ = ""; }
-not_test: NOT not_test { $$ = concatenate(stylize($1, "operator"), $2);}
- | comparison { $$ = $1; }
-comparison: expr { $$ = $1; }
- | expr comp_more { $$ = concatenate($1, $2);}
-comp_more: comp_op expr { $$ = concatenate($1, $2);}
- | comp_more comp_op expr {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-comp_op: LESS { $$ = stylize($1, "operator");}
- | BIGGER { $$ = stylize($1, "operator");}
- | EQL { $$ = stylize($1, "operator");}
- | LESSEQL { $$ = stylize($1, "operator");}
- | BIGGEREQL { $$ = stylize($1, "operator");}
- | NOTEQL { $$ = stylize($1, "operator");}
- | IN { $$ = stylize($1, "operator");}
- | NOTIN { $$ = stylize($1, "operator");}
- | IS { $$ = stylize($1, "operator");}
- | ISNOT { $$ = stylize($1, "operator");}
-star_expr: STAR expr { $$ = concatenate(stylize($1, "operator"), $2);}
-expr: xor_expr { $$ = $1; }
- | xor_expr expr_more { $$ = concatenate($1, $2);}
-expr_more: BOOLOR xor_expr { $$ = concatenate(stylize($1, "operator"), $2);}
- | expr_more BOOLOR xor_expr {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
-xor_expr: and_expr { $$ = $1; }
- | and_expr xor_expr_more { $$ = concatenate($1, $2);}
-xor_expr_more: HAT and_expr { $$ = concatenate(stylize($1, "operator"), $2);}
- | xor_expr_more HAT and_expr {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
-and_expr: shift_expr { $$ = $1; }
- | shift_expr and_expr_more { $$ = concatenate($1, $2);}
-and_expr_more: BOOLAND shift_expr { $$ = concatenate(stylize($1, "operator"), $2);}
- | and_expr_more BOOLAND shift_expr {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
-shift_expr: arith_expr { $$ = $1; }
- | arith_expr shift_expr_more { $$ = concatenate($1, $2);}
-shift_expr_more: shift_op arith_expr { $$ = concatenate($1, $2);}
- | shift_expr_more shift_op arith_expr {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-shift_op: SHIFTLESS { $$ = stylize($1, "operator");}
- | SHIFTRIGHT { $$ = stylize($1, "operator");}
-arith_expr: term { $$ = $1; }
- | term arith_expr_more { $$ = concatenate($1, $2);}
-arith_expr_more: arith_op term { $$ = concatenate($1, $2);}
- | arith_expr_more arith_op term {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-arith_op: PLUS { $$ = stylize($1, "operator");}
- | MINUS { $$ = stylize($1, "operator");}
-term: factor { $$ = $1; }
- | factor term_more { $$ = concatenate($1, $2);}
-term_more: term_op factor { $$ = concatenate($1, $2);}
- | term_more term_op factor {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-term_op: STAR { $$ = stylize($1, "operator");}
- | AT { $$ = stylize($1, "operator");}
- | SLASH { $$ = stylize($1, "operator");}
- | PERCENT { $$ = stylize($1, "operator");}
- | DOUBLESLASH { $$ = stylize($1, "operator");}
-factor: unar_op factor { $$ = concatenate($1, $2); }
- | power { $$ = $1; }
-unar_op: PLUS { $$ = stylize($1, "operator");}
- | MINUS { $$ = stylize($1, "operator");}
- | TILDA { $$ = stylize($1, "operator");}
-power: atom_expr { $$ = $1; }
- | atom_expr DOUBLESTAR factor { $$ = concatenate3($1, stylize($2, "operator"), $3);}
-atom_expr: AWAIT atom { $$ = concatenate(stylize($1, "operator"), $2);}
- | atom { $$ = $1; }
- | AWAIT atom trailer_more {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- }
- | atom trailer_more { $$ = concatenate($1, $2);}
-atom: LPAREN RPAREN { $$ = concatenate($1, $2);}
- | LPAREN yield_expr RPAREN { $$ = concatenate3($1, $2, $3);}
- | LPAREN testlist_comp RPAREN { $$ = concatenate3($1, $2, $3);}
- | LSQPAREN RSQPAREN { $$ = concatenate($1, $2);}
- | LSQPAREN testlist_comp RSQPAREN { $$ = concatenate3($1, $2, $3); }
- | LCURPAREN RCURPAREN { $$ = concatenate($1, $2);}
- | LCURPAREN dictorsetmaker RCURPAREN { $$ = concatenate3($1, $2, $3); }
- | NAME { $$ = stylize($1, "identifier");}
- | NUMBER { $$ = stylize($1, "number");}
- | STRING { $$ = stylize($1, "string");}
- | THREEDOTS { $$ = stylize($1, "operator");}
- | NONE { $$ = stylize($1, "constant");}
- | TRUE { $$ = stylize($1, "constant");}
- | FALSE { $$ = stylize($1, "constant");}
- | DOLAR { $$ = "";}
-testlist_comp: test testlist_comp_second { $$ = concatenate($1, $2);}
- | star_expr testlist_comp_second { $$ = concatenate($1, $2);}
-testlist_comp_second: comp_for { $$ = $1; }
- | testlist_more_arg { $$ = $1; }
-testlist_more_arg: COMMA test COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | COMMA test { $$ = concatenate($1, $2);}
- | testlist_more_arg COMMA test COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
- | testlist_more_arg COMMA test {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | testlist_more_arg COMMA star_expr COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
- | testlist_more_arg COMMA star_expr {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-trailer: LPAREN RPAREN { $$ = concatenate($1, $2);}
- | LPAREN arglist RPAREN {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | LSQPAREN subscriptlist RSQPAREN {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | DOT NAME { $$ = concatenate($1, stylize($2, "identifier"));}
-trailer_more: trailer { $$ = $1; }
- | trailer_more trailer { $$ = concatenate($1, $2);}
-subscriptlist: subscript COMMA { $$ = concatenate($1, $2);}
- | subscript { $$ = $1; }
- | subscript subscipt_more COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | subscript subscipt_more { $$ = concatenate($1, $2);}
-subscipt_more: COMMA subscript { $$ = concatenate($1, $2);}
- | subscipt_more COMMA subscript {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-subscript: test { $$ = $1; }
- | COLON { $$ = $1; }
- | COLON test { $$ = concatenate($1, $2);}
- | COLON sliceop { $$ = concatenate($1, $2);}
- | COLON test sliceop {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | test COLON { $$ = concatenate($1, $2);}
- | test COLON test { $$ = concatenate($1, $2);}
- | test COLON sliceop {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | test COLON test sliceop {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
-sliceop: COLON test { $$ = concatenate($1, $2);}
- | COLON { $$ = $1; }
-exprlist: exprlist_op COMMA { $$ = concatenate($1, $2);}
- | exprlist_op { $$ = $1; }
- | exprlist_op exprlist_more COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | exprlist_op exprlist_more { $$ = concatenate($1, $2);}
-exprlist_more: COMMA exprlist_op { $$ = concatenate($1, $2);}
- | exprlist_more COMMA exprlist_op {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-exprlist_op: expr { $$ = $1; }
- | star_expr { $$ = $1; }
-testlist: test { $$ = $1; }
- | test COMMA { $$ = concatenate($1, $2);}
- | test testlist_more { $$ = concatenate($1, $2);}
- | test testlist_more COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-testlist_more: COMMA test { $$ = concatenate($1, $2);}
- | testlist_more COMMA test {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-dictorsetmaker: test_star_expr dsm_one { $$ = concatenate($1, $2);}
- | test_star_expr COMMA { $$ = concatenate($1, $2);} /* in the case test_star_expr is zero times */
- | test_star_expr { $$ = $1; } /* in the case test_star_expr is zero times */
- | test_star_expr_2 dsm_two { $$ = concatenate($1, $2);}
- | test_star_expr_2 COMMA { $$ = concatenate($1, $2);}/* in the case test_star_expr_2 is zero times */
- | test_star_expr_2 { $$ = $1; } /* in the case test_star_expr_2 is zero times */
-test_star_expr: test COLON test {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | DOUBLESTAR expr { $$ = concatenate(stylize($1, "operator"), $2);}
-dsm_one: comp_for { $$ = $1; }
- | comp_for COMMA { $$ = concatenate($1, $2);}
- | test_star_expr_more COMMA { $$ = concatenate($1, $2);}
- | test_star_expr_more { $$ = $1; }
-test_star_expr_more: COMMA test_star_expr { $$ = concatenate($1, $2);}
- | test_star_expr_more COMMA test_star_expr {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-test_star_expr_2: test { $$ = $1; }
- | star_expr { $$ = $1; }
-dsm_two: comp_for { $$ = $1; }
- | comp_for COMMA { $$ = concatenate($1, $2);}
- | test_star_expr_2_more COMMA { $$ = concatenate($1, $2);}
- | test_star_expr_2_more { $$ = $1; }
-test_star_expr_2_more: COMMA test_star_expr_2 { $$ = concatenate($1, $2);}
- | test_star_expr_2_more COMMA test_star_expr_2 {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-
-classdef: CLASS NAME COLON suite {
- $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- }
- | CLASS NAME LPAREN RPAREN COLON suite {
- $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- $$ = concatenate($$, $6);
- }
- | CLASS NAME LPAREN arglist RPAREN COLON suite {
- $$ = concatenate(stylize($1, "keyword"), stylize($2, "identifier"));
- $$ = concatenate($$, $3);
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- $$ = concatenate($$, $6);
- $$ = concatenate($$, $7);
- }
-arglist: argument COMMA { $$ = concatenate($1, $2);}
- | argument { $$ = $1; }
- | argument arglist_more COMMA {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
- | argument arglist_more { $$ = concatenate($1, $2);}
-arglist_more: COMMA argument { $$ = concatenate($1, $2);}
- | arglist_more COMMA argument {
- $$ = concatenate($1, $2);
- $$ = concatenate($$, $3);
- }
-argument: test comp_for { $$ = concatenate($1, $2);}
- | test { $$ = $1; }
- | test ASSIGN test {
- $$ = concatenate($1, stylize($2, "operator"));
- $$ = concatenate($$, $3);
- }
- | DOUBLESTAR test { $$ = concatenate(stylize($1, "operator"), $2);}
- | STAR test { $$ = concatenate(stylize($1, "operator"), $2);}
-comp_iter: comp_for { $$ = $1; }
- | comp_if { $$ = $1; }
-sync_comp_for: FOR exprlist IN or_test {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, stylize($3, "operator"));
- $$ = concatenate($$, $4);
- }
- | FOR exprlist IN or_test comp_iter {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, stylize($3, "operator"));
- $$ = concatenate($$, $4);
- $$ = concatenate($$, $5);
- }
-comp_for: sync_comp_for { $$ = $1; }
- | ASYNC comp_for { $$ = concatenate(stylize($1, "keyword"), $2);}
-comp_if: IF test_nocond { $$ = concatenate(stylize($1, "keyword"), $2);}
- | IF test_nocond comp_iter {
- $$ = concatenate(stylize($1, "keyword"), $2);
- $$ = concatenate($$, $3);
- }
-
-/* encoding_decl: NAME */
-
-yield_expr: YIELD { $$ = stylize($1, "keyword");}
- | YIELD yield_arg { $$ = concatenate(stylize($1, "keyword"), $2);}
-yield_arg: FROM test { $$ = concatenate(stylize($1, "keyword"), $2);}
- | testlist { $$ = $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>python-parse.html</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[])
-{
- #if YYDEBUG
- yydebug = 1;
- #endif
- //printHTML();
- FILE *myfile = fopen("input.file", "r");
-if (!myfile) {
- printf("I can't open input.file!\n");
- return -1;
-}
-yyin = myfile;
- printHTML();
- return 0;
-}
diff --git a/homework/81350/parser/colapser/stack.c b/homework/81350/parser/colapser/stack.c
deleted file mode 100644
index c6edd42..0000000
--- a/homework/81350/parser/colapser/stack.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "stack.h"
-
-int stack[MAXSIZE];
-int top = -1;
-
-int isempty() {
-
- if(top == -1)
- return 1;
- else
- return 0;
-}
-
-int isfull() {
-
- if(top == MAXSIZE)
- return 1;
- else
- return 0;
-}
-
-int peek() {
- return stack[top];
-}
-
-int pop() {
- int data;
-
- if(!isempty()) {
- data = stack[top];
- top = top - 1;
- return data;
- } else {
- printf("Could not retrieve data, Stack is empty.\n");
- }
-}
-
-int push(int data) {
-
- if(!isfull()) {
- top = top + 1;
- stack[top] = data;
- } else {
- printf("Could not insert data, Stack is full.\n");
- }
-}
-
-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;
-}
diff --git a/homework/81350/parser/colapser/stack.h b/homework/81350/parser/colapser/stack.h
deleted file mode 100644
index 83c2741..0000000
--- a/homework/81350/parser/colapser/stack.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define MAXSIZE 1000
-extern int stack[MAXSIZE];
-extern int top;
-
-int isempty();
-int isfull();
-int peek();
-int pop();
-int push(int);
-
-char* concatenate(char*, char*);
diff --git a/homework/81350/parser/input.file b/homework/81350/parser/input.file
deleted file mode 100644
index d39ec80..0000000
--- a/homework/81350/parser/input.file
+++ /dev/null
@@ -1,3 +0,0 @@
-func():
- a=2
- a=2+3
diff --git a/homework/81350/parser/lexer.lex b/homework/81350/parser/lexer.lex
deleted file mode 100644
index 03ea391..0000000
--- a/homework/81350/parser/lexer.lex
+++ /dev/null
@@ -1,182 +0,0 @@
-%{
-/* need this for the call to atof() below */
-#include <math.h>
-#include "parser.tab.h"
-#include "stack.h"
-#define YY_NO_UNISTD_H
-static const unsigned int TAB_WIDTH = 2;
-
-#define YY_USER_INIT { push(0); BEGIN(initial); }
-int current_line = 0;
-int current_line_indent = 0;
-int indent_level = 0;
-int is_fake_sym = 0;
-%}
-
-digit [0-9]
-number [1-9]{digit}*
-fnumber {digit}+"."{digit}*
-letter [a-zA-Z]
-string ["]{3}(["]{0,2}([^\\"]|\\(.|\n)))*["]{3}
-
-%x initial
-%x indent
-%s normal
-
-%%
- int indent_caller = normal;
-<*>"\n" { REJECT; }
-
-<initial>. { unput(*yytext); indent_caller = normal; BEGIN(indent); }
-<initial>\n { indent_caller = normal; BEGIN(indent); }
-
-<indent>" " { current_line_indent++;}
-<indent>"\t" { current_line_indent = (current_line_indent+2) & ~1;} /* one tab is 2 spaces*/
-<indent>"\n" { current_line_indent = 0; return NEWLINE;}
-<indent><<EOF>> {
- if(peek() != 0){
- pop();
- if(current_line_indent != peek()){
- unput('\n');
- for(int i=0; i< peek(); i++){
- unput(' ');
- }
- } else {
- BEGIN(indent_caller);
- }
- return UNINDENT;
- } else {
- yyterminate();
- }
- }
-<indent>. {
- if(!is_fake_sym){
- unput(*yytext);
- }
- is_fake_sym = 0;
- if (current_line_indent > peek()) {
- push(current_line_indent);
- BEGIN(indent_caller);
- return INDENT;
- } else if (current_line_indent < peek()) {
- pop();
- if(current_line_indent != peek()){
- for(int i=0; i< current_line_indent; i++){
- unput(' ');
- }
- unput('\n');
-
- unput('.');
- is_fake_sym = 1;
- for(int i=0; i < peek(); i++){
- unput(' ');
- is_fake_sym = 1;
- }
- unput('\n');
- is_fake_sym = 1;
- } else {
- BEGIN(indent_caller);
- }
- return UNINDENT;
- } else {
- BEGIN(indent_caller);
- }
- }
-<normal>"\n" { current_line_indent = 0; indent_caller = YY_START; BEGIN(indent); return NEWLINE;}
-
-<normal>{number}|{fnumber} { yylval.Number = atof(yytext); return NUMBER; }
-<normal>{digit} { yylval.Number = atof(yytext); return NUMBER;}
-<normal>{string} { strcpy(yylval.Lexeme, strdup(yytext)); return STRING;}
-
-<normal>"+" { return PLUS; }
-<normal>"-" { return MINUS; }
-<normal>"*" { return STAR; }
-<normal>"/" { return SLASH; }
-<normal>"//" { return DOUBLESLASH;}
-<normal>"%" { return PERCENT; }
-<normal>"**" { return DOUBLESTAR; }
-<normal>">" { return BIGGER; }
-<normal>"<" { return LESS; }
-<normal>">=" { return BIGGEREQL; }
-<normal>"<=" { return LESSEQL; }
-<normal>"==" { return EQL; }
-<normal>"!=" { return NOTEQL; }
-
-
-<normal>"&" { return BOOLAND; }
-<normal>"|" { return BOOLOR; }
-<normal>"~" { return TILDA; }
-<normal>"^" { return HAT; }
-<normal>">>" { return SHIFTRIGHT; }
-<normal>"<<" { return SHIFTLESS; }
-
-
-<normal>"=" { return ASSIGN; }
-<normal>"+=" { return PLUSASSIGN; }
-<normal>"-=" { return MINUSASSIGN;}
-<normal>"*=" { return STARASSIGN; }
-<normal>"/=" { return SLASHASSIGN;}
-<normal>"%=" { return PERCENTASSIGN;}
-<normal>"**=" { return DOUBLESTARASSIGN;}
-<normal>"//=" { return DOUBLESLASHASSIGN;}
-<normal>"^=" { return HATASSIGN;}
-<normal>"&=" { return BOOLANDASSIGN;}
-<normal>"|=" { return BOOLORASSIGN;}
-<normal>">>=" { return SHIFTRIGHTASSIGN;}
-<normal>"<<=" { return SHIFTLEFTASSIGN;}
-<normal>"@=" { return ATASSIGN; }
-
-<normal>"@" { return AT;}
-<normal>"(" { return LPAREN; }
-<normal>")" { return RPAREN; }
-<normal>"[" { return LSQPAREN;}
-<normal>"]" { return RSQPAREN;}
-<normal>"{" { return LCURPAREN;}
-<normal>"}" { return RCURPAREN;}
-<normal>";" { return SEMICOLON; }
-<normal>":" { return COLON; }
-<normal>"," { return COMMA; }
-<normal>"." { return DOT; }
-<normal>"..." { return THREEDOTS;}
-
-<normal>"async" { return ASYNC;}
-<normal>"def" { return DEF; }
-<normal>"and" { return AND;}
-<normal>"or" { return OR;}
-<normal>"not" { return NOT;}
-<normal>"in" { return IN;}
-<normal>"not in" { return NOTIN;}
-<normal>"is" { return IS;}
-<normal>"is not" { return ISNOT;}
-<normal>"await" { return AWAIT;}
-<normal>"None" { return NONE;}
-<normal>"True" { return TRUE;}
-<normal>"False" { return FALSE;}
-<normal>"class" { return CLASS;}
-<normal>"for" { return FOR;}
-<normal>"if" { return IF;}
-<normal>"elif" { return ELIF;}
-<normal>"else" { return ELSE;}
-<normal>"except" { return EXCEPT;}
-<normal>"from" { return FROM;}
-<normal>"finally" { return FINALLY;}
-<normal>"lambda" { return LAMBDA;}
-<normal>"yield" { return YIELD;}
-<normal>"as" { return AS;}
-<normal>"assert" { return ASSERT;}
-<normal>"break" { return BREAK;}
-<normal>"continue" { return CONTINUE;}
-<normal>"del" { return DEL;}
-<normal>"global" { return GLOBAL;}
-<normal>"import" { return IMPORT;}
-<normal>"nonlocal" { return NONLOCAL;}
-<normal>"pass" { return PASS;}
-<normal>"raise" { return RAISE;}
-<normal>"return" { return RETURN;}
-<normal>"try" { return TRY;}
-<normal>"while" { return WHILE;}
-<normal>"with" { return WITH;}
-
-<normal>{letter}({letter}|{digit})* {
- strcpy(yylval.Lexeme, strdup(yytext));
-return NAME; }
diff --git a/homework/81350/parser/parser.y b/homework/81350/parser/parser.y
deleted file mode 100644
index 97d7393..0000000
--- a/homework/81350/parser/parser.y
+++ /dev/null
@@ -1,441 +0,0 @@
-
-%code requires {
-#include <stdio.h>
-#include <string.h>
-int yylex();
-int yyerror(const char* error);
-FILE *yyin;
-#undef YYDEBUG
-#define YYDEBUG 1
-/* #define YY_DECL int yylex(scanner) void* scanner; */
-}
-
-%start input_stmt
-/* %define api.pure full */
-%define api.value.type {union name { double Number; char Lexeme[256];} }
-
-%token NUMBER
-%token PLUS
-%token MINUS
-%token STAR
-%token SLASH
-%token DOUBLESLASH
-%token PERCENT
-%token DOUBLESTAR
-%token BIGGER
-%token LESS
-%token BIGGEREQL
-%token LESSEQL
-%token EQL
-%token NOTEQL
-
-%token BOOLAND
-%token BOOLOR
-%token TILDA
-%token HAT
-%token SHIFTRIGHT
-%token SHIFTLESS
-
-%token ASSIGN
-%token PLUSASSIGN
-%token MINUSASSIGN
-%token STARASSIGN
-%token SLASHASSIGN
-%token PERCENTASSIGN
-%token DOUBLESTARASSIGN
-%token DOUBLESLASHASSIGN
-%token HATASSIGN
-%token BOOLANDASSIGN
-%token BOOLORASSIGN
-%token SHIFTRIGHTASSIGN
-%token SHIFTLEFTASSIGN
-%token ATASSIGN
-
-%token LPAREN
-%token RPAREN
-%token LSQPAREN
-%token RSQPAREN
-%token LCURPAREN
-%token RCURPAREN
-%token SEMICOLON
-%token COLON
-%token COMMA
-%token DOT
-%token AT
-%token THREEDOTS
-
-%token NAME
-
-%token DEF
-%token ASYNC
-%token AND
-%token OR
-%token NOT
-%token IN
-%token NOTIN
-%token IS
-%token ISNOT
-%token AWAIT
-%token NONE
-%token TRUE
-%token FALSE
-%token FOR
-%token IF
-%token ELIF
-%token ELSE
-%token EXCEPT
-%token CLASS
-%token FROM
-%token FINALLY
-%token LAMBDA
-%token YIELD
-%token AS
-%token ASSERT
-%token BREAK
-%token CONTINUE
-%token DEL
-%token GLOBAL
-%token IMPORT
-%token NONLOCAL
-%token PASS
-%token RAISE
-%token RETURN
-%token TRY
-%token WHILE
-%token WITH
-
-%token INDENT
-%token UNINDENT
-%token NEWLINE
-%token EOFILE
-%token STRING
-
-/*
-Define both - precedence and associativity */
-%left PLUS MINUS
-%left STAR SLASH
-
-%%
-/*
-input:
- | expr { printf("%f\n", $1.Number); }
- ;
-expr: NUMBER { $$.Number = $1.Number; }
- | '(' expr ')' { $$.Number = $2.Number; }
- | expr PLUS expr { $$.Number = $1.Number + $3.Number; }
- | expr MINUS expr { $$.Number = $1.Number - $3.Number; }
- | expr STAR expr { $$.Number = $1.Number * $3.Number; }
- | expr SLASH expr { $$.Number = $1.Number / $3.Number; }
-*/
-
-input_stmt: NEWLINE | simple_stmt | compound_stmt NEWLINE | compound_stmt
-
-
-decorator: AT dotted_name NEWLINE
- | AT dotted_name LPAREN RPAREN NEWLINE
- | AT dotted_name LPAREN arglist RPAREN NEWLINE
-decorator_more: decorator | decorator_more decorator
-decorated: decorator_more obj_definition
-obj_definition: classdef | funcdef | async_funcdef
-
-
-async_funcdef: ASYNC funcdef
-funcdef: DEF NAME parameters COLON suite /* | DEF NAME parameters '->' test COLON suite */
-parameters: LPAREN RPAREN | LPAREN typedargslist RPAREN
-
-typedargslist: td_one | td_two | td_three
-td_one: td_one_arg td_more_arg td_one_optional | td_one_arg td_one_optional
-td_one_arg: tfpdef ASSIGN test | tfpdef
-td_more_arg: COMMA td_one_arg | td_more_arg COMMA td_one_arg
-/* td_add_arg: COMMA td_one_arg td_more_arg */
-td_one_optional: COMMA td_two | COMMA td_three | COMMA |
-td_two: STAR tfpdef td_more_arg td_two_optional | STAR td_more_arg td_two_optional
-td_two_optional: COMMA td_three | COMMA
-td_three: DOUBLESTAR tfpdef COMMA | DOUBLESTAR tfpdef
-tfpdef: NAME | NAME COLON test
-
-varargslist: var_one | var_two | var_three
-var_one: var_one_arg var_more_arg var_one_optional | var_one_arg var_one_optional
-var_one_arg: vfpdef ASSIGN test | vfpdef
-var_more_arg: COMMA var_one_arg | var_more_arg COMMA var_one_arg
-var_one_optional: COMMA var_two | COMMA var_three | COMMA
-var_two: STAR vfpdef var_more_arg var_two_optional | STAR var_more_arg var_two_optional
-var_two_optional: COMMA var_three | COMMA
-var_three: DOUBLESTAR vfpdef COMMA | DOUBLESTAR vfpdef
-vfpdef: NAME
-
-stmt: simple_stmt
- | compound_stmt
-simple_stmt: small_stmt simple_more_stmt SEMICOLON NEWLINE
- | small_stmt simple_more_stmt NEWLINE
- | small_stmt NEWLINE
- | small_stmt SEMICOLON NEWLINE
-simple_more_stmt: SEMICOLON small_stmt
- | simple_more_stmt SEMICOLON small_stmt
-small_stmt: expr_stmt
- | del_stmt
- | pass_stmt
- | flow_stmt
- | import_stmt
- | global_stmt
- | nonlocal_stmt
- | assert_stmt
-expr_stmt: testlist_star_expr expr_stmt_two
- | testlist_star_expr
-expr_stmt_two: annassign
- | augassign aug_expr
- | assign_more
-assign_more: ASSIGN assign_expr
- | assign_more ASSIGN assign_expr
-assign_expr: yield_expr
- | testlist_star_expr
-aug_expr: yield_expr
- | testlist
-annassign: COLON test | COLON test ASSIGN test
-testlist_star_expr: testlist_se testlist_star_expr_more COMMA
- | testlist_se testlist_star_expr_more
- | testlist_se COMMA
- | testlist_se
-testlist_se: test
- | star_expr
-testlist_star_expr_more: COMMA testlist_se | testlist_star_expr_more COMMA testlist_se
-augassign: PLUSASSIGN
- | MINUSASSIGN
- | STARASSIGN
- | ATASSIGN
- | SLASHASSIGN
- | PERCENTASSIGN
- | BOOLANDASSIGN
- | BOOLORASSIGN
- | HATASSIGN
- | SHIFTLEFTASSIGN
- | SHIFTRIGHTASSIGN
- | DOUBLESTARASSIGN
- | DOUBLESLASHASSIGN
-
-del_stmt: DEL exprlist
-pass_stmt: PASS
-flow_stmt: break_stmt
- | continue_stmt
- | return_stmt
- | raise_stmt
- | yield_stmt
-break_stmt: BREAK
-continue_stmt: CONTINUE
-return_stmt: RETURN | RETURN testlist
-yield_stmt: yield_expr
-raise_stmt: RAISE | RAISE test | RAISE test FROM test
-import_stmt: import_name | import_from
-import_name: IMPORT dotted_as_names
-import_from: FROM import_from_name IMPORT import_from_import
-import_from_name: dotted_name | dots_more dotted_name | dots_more
-dots: DOT | THREEDOTS
-dots_more: dots | dots_more dots
-import_from_import: STAR
- | LPAREN import_as_names RPAREN
- | import_as_names
-import_as_name: NAME | NAME AS NAME
-dotted_as_name: dotted_name | dotted_name AS NAME
-import_as_names: import_as_name COMMA
- | import_as_name
- | import_as_name import_as_name_more COMMA
- | import_as_name import_as_name_more
-import_as_name_more: COMMA import_as_name
- | import_as_name_more COMMA import_as_name
-dotted_as_names: dotted_as_name
- | dotted_as_name dotted_as_name_more
-dotted_as_name_more: COMMA dotted_as_name
- | dotted_as_name_more COMMA dotted_as_name
-dotted_name: NAME | NAME dotted_name_more
-dotted_name_more: DOT NAME | dotted_name_more DOT NAME
-global_stmt: GLOBAL NAME | GLOBAL NAME global_stmt_more
-global_stmt_more: COMMA NAME | global_stmt_more COMMA NAME
-nonlocal_stmt: NONLOCAL NAME | NONLOCAL NAME nonlocal_stmt_more
-nonlocal_stmt_more: COMMA NAME | nonlocal_stmt_more COMMA NAME
-assert_stmt: ASSERT test | ASSERT COMMA test
-
-compound_stmt: if_stmt
- | while_stmt
- | for_stmt
- | try_stmt
- | with_stmt
- | funcdef
- | classdef
- | decorated
- | async_stmt
-async_stmt: ASYNC funcdef | ASYNC with_stmt | ASYNC for_stmt
-if_stmt: IF test COLON suite elif_stmt_more else_stmt
- | IF test COLON suite elif_stmt_more
- | IF test COLON suite else_stmt
- | IF test COLON suite
-elif_stmt: ELIF test COLON suite
-else_stmt: ELSE COLON suite
-elif_stmt_more: elif_stmt | elif_stmt_more elif_stmt
-while_stmt: WHILE test COLON suite
- | WHILE test COLON suite else_stmt
-for_stmt: FOR exprlist IN testlist COLON suite
- | FOR exprlist IN testlist COLON suite else_stmt
-try_stmt: TRY COLON suite try_stmt_two
-try_stmt_two: except_fin_stmt | finally_stmt
-finally_stmt: FINALLY COLON suite
-except_fin_stmt: except_stmt_more
- | except_stmt_more else_stmt
- | except_stmt_more finally_stmt
- | except_stmt_more else_stmt finally_stmt
-except_stmt_more: except_stmt | except_stmt_more except_stmt
-except_stmt: except_clause COLON suite
-except_clause: EXCEPT
- | EXCEPT test
- | EXCEPT test AS NAME
-with_stmt: WITH with_item with_item_more COLON suite
- | WITH with_item COLON suite
-with_item: test | test AS expr
-with_item_more: COMMA with_item | with_item_more COMMA with_item
-suite: simple_stmt | NEWLINE INDENT stmt_more UNINDENT
-stmt_more: stmt | stmt_more stmt
-
-
-test: or_test
- | or_test IF or_test ELSE test
- | lambdadef
-test_nocond: or_test | lambdadef_nocond
-lambdadef: LAMBDA COLON test
- | LAMBDA varargslist COLON test
-lambdadef_nocond: LAMBDA COLON test_nocond
- | LAMBDA varargslist COLON test
-or_test: and_test or_test_more
-or_test_more: | OR and_test or_test_more
-and_test: not_test and_test_more
-and_test_more: | AND not_test and_test_more
-not_test: NOT not_test | comparison
-comparison: expr | expr comp_more
-comp_more: comp_op expr | comp_more comp_op expr
-comp_op: LESS | BIGGER | EQL | LESSEQL | BIGGEREQL | NOTEQL | IN | NOTIN | IS | ISNOT
-star_expr: STAR expr
-expr: xor_expr | xor_expr expr_more
-expr_more: BOOLOR xor_expr | expr BOOLOR xor_expr
-xor_expr: and_expr | and_expr xor_expr_more
-xor_expr_more: HAT and_expr | xor_expr HAT and_expr
-and_expr: shift_expr | shift_expr and_expr_more
-and_expr_more: BOOLAND shift_expr | and_expr BOOLAND shift_expr
-shift_expr: arith_expr | arith_expr shift_expr_more
-shift_expr_more: shift_op arith_expr | shift_expr shift_op arith_expr
-shift_op: SHIFTLESS | SHIFTRIGHT
-arith_expr: term | term arith_expr_more
-arith_expr_more: arith_op term | arith_expr arith_op term
-arith_op: PLUS | MINUS
-term: factor | factor term_more
-term_more: term_op factor | term term_op factor
-term_op: STAR | AT | SLASH | PERCENT | DOUBLESLASH
-factor: unar_op factor | power
-unar_op: PLUS | MINUS | TILDA
-power: atom_expr | atom_expr DOUBLESTAR factor
-atom_expr: AWAIT atom | atom | AWAIT atom trailer_more | atom trailer_more
-atom: LPAREN RPAREN
- | LPAREN yield_expr RPAREN
- | LPAREN testlist_comp RPAREN
- | LSQPAREN RSQPAREN
- | LSQPAREN testlist_comp RSQPAREN
- | LCURPAREN RCURPAREN
- | LCURPAREN dictorsetmaker RCURPAREN
- | NAME
- | NUMBER
- | STRING
- | THREEDOTS
- | NONE
- | TRUE
- | FALSE
-testlist_comp: test testlist_comp_second | star_expr testlist_comp_second
-testlist_comp_second: comp_for | testlist_more_arg
-testlist_more_arg: COMMA test COMMA
- | COMMA test
- | testlist_more_arg COMMA test COMMA
- | testlist_more_arg COMMA test
- | testlist_more_arg COMMA star_expr COMMA
- | testlist_more_arg COMMA star_expr
-trailer: LPAREN RPAREN
- | LPAREN arglist RPAREN
- | LSQPAREN subscriptlist RSQPAREN
- | DOT NAME
-trailer_more: trailer | trailer_more trailer
-subscriptlist: subscript COMMA
- | subscript
- | subscript subscipt_more COMMA |
- | subscript subscipt_more
-subscipt_more: COMMA subscript | subscipt_more COMMA subscript
-subscript: test
- | COLON
- | COLON test
- | COLON sliceop
- | COLON test sliceop
- | test COLON
- | test COLON test
- | test COLON sliceop
- | test COLON test sliceop
-sliceop: COLON test | COLON
-exprlist: exprlist_op COMMA | exprlist_op | exprlist_op exprlist_more COMMA | exprlist_op exprlist_more
-exprlist_more: COMMA exprlist_op | exprlist_more COMMA exprlist_op
-exprlist_op: expr | star_expr
-testlist: test | test COMMA | test testlist_more | test testlist_more COMMA
-testlist_more: COMMA test | testlist_more COMMA test
-dictorsetmaker: test_star_expr dsm_one
- | test_star_expr COMMA /* in the case test_star_expr is zero times */
- | test_star_expr /* in the case test_star_expr is zero times */
- | test_star_expr_2 dsm_two
- | test_star_expr_2 COMMA /* in the case test_star_expr_2 is zero times */
- | test_star_expr_2 /* in the case test_star_expr_2 is zero times */
-test_star_expr: test COLON test | DOUBLESTAR expr
-dsm_one: comp_for | comp_for COMMA | test_star_expr_more COMMA | test_star_expr_more
-test_star_expr_more: COMMA test_star_expr | test_star_expr_more COMMA test_star_expr
-test_star_expr_2: test | star_expr
-dsm_two: comp_for | comp_for COMMA | test_star_expr_2_more COMMA | test_star_expr_2_more
-test_star_expr_2_more: COMMA test_star_expr_2 | test_star_expr_2_more COMMA test_star_expr_2
-
-classdef: CLASS NAME COLON suite
- | CLASS NAME LPAREN RPAREN COLON suite
- | CLASS NAME LPAREN arglist RPAREN COLON suite
-arglist: argument COMMA
- | argument
- | argument arglist_more COMMA
- | argument arglist_more
-arglist_more: COMMA argument
- | arglist_more COMMA argument
-argument: test comp_for
- | test
- | test ASSIGN test
- | DOUBLESTAR test
- | STAR test
-comp_iter: comp_for
- | comp_if
-sync_comp_for: FOR exprlist IN or_test
- | FOR exprlist IN or_test comp_iter
-comp_for: sync_comp_for
- | ASYNC comp_for
-comp_if: IF test_nocond | IF test_nocond comp_iter
-
-/* encoding_decl: NAME */
-
-yield_expr: YIELD | YIELD yield_arg
-yield_arg: FROM test | testlist
-
-%%
-int yyerror(const char* error)
-{
- extern int current_line;
- fprintf(stderr, "input:%d: error: %s\n", current_line, error);
- return 0;
-}
- int main()
-{
-#if YYDEBUG
- yydebug = 1;
-#endif
-FILE *myfile = fopen("input.file", "r");
-if (!myfile) {
- printf("I can't open input.file!\n");
- return -1;
-}
-yyin = myfile;
-yyparse();
- return 0;
-}
diff --git a/homework/81350/parser/stack.c b/homework/81350/parser/stack.c
deleted file mode 100644
index a051f7a..0000000
--- a/homework/81350/parser/stack.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "stack.h"
-
-int stack[MAXSIZE];
-int top = -1;
-
-int isempty() {
-
- if(top == -1)
- return 1;
- else
- return 0;
-}
-
-int isfull() {
-
- if(top == MAXSIZE)
- return 1;
- else
- return 0;
-}
-
-int peek() {
- return stack[top];
-}
-
-int pop() {
- int data;
-
- if(!isempty()) {
- data = stack[top];
- top = top - 1;
- return data;
- } else {
- printf("Could not retrieve data, Stack is empty.\n");
- }
-}
-
-int push(int data) {
-
- if(!isfull()) {
- top = top + 1;
- stack[top] = data;
- } else {
- printf("Could not insert data, Stack is full.\n");
- }
-}
diff --git a/homework/81350/parser/stack.h b/homework/81350/parser/stack.h
deleted file mode 100644
index 2fccd60..0000000
--- a/homework/81350/parser/stack.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-#include <stdio.h>
-
-#define MAXSIZE 1000
-extern int stack[MAXSIZE];
-extern int top;
-
-int isempty();
-int isfull();
-int peek();
-int pop();
-int push(int);