Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit7e8bcc75b6ae00248ad4f9ff9753be251d88a4ff (patch)
Author
 dtagarev <92181714+dtagarev@users.noreply.github.com>
2022-11-03 20:51:40 +0200
Committer
 GitHub <noreply@github.com>
2022-11-03 20:51:40 +0200
Files62c25059ff0d41e13a0eac6765674fed68d604eb
IPL-7e8bcc75b6ae00248ad4f9ff9753be251d88a4ff.tar
IPL-7e8bcc75b6ae00248ad4f9ff9753be251d88a4ff.tar.gz
IPL-7e8bcc75b6ae00248ad4f9ff9753be251d88a4ff.zip
Parentdb0818ba7ebf7bc7602ba6cbf7afe2327b94cc87 (diff)
solution to first homework (#132)
* Delete lex.yy.c * adding homework1 * Delete output * correction to the location of the folders Co-authored-by: dtrendafilov <trendafilov.dn@gmail.com>
diff --git a/homework/9MI0800164/Homework1_9MI0800164/lua_lex.l b/homework/9MI0800164/Homework1_9MI0800164/lua_lex.l
new file mode 100644
index 0000000..e51f53c
--- /dev/null
+++ b/homework/9MI0800164/Homework1_9MI0800164/lua_lex.l
@@ -0,0 +1,77 @@
+%{
+
+%}
+
+DIGIT [0-9]
+ID [a-zA-Z_0-9]*
+KEYWORD and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while
+OPERATOR "+"|"-"|"*"|"/"|"%"|"^"|"#"|"=="|"~="|"<="|">="|"<"|">"|"="|"("|")"|"{"|"}"|"["|"]"|"::"|";"|":"|","|"."|".."|"..."|"<<"|">>"|"&"|"|"|"//"|"~"|"'"|"--"|"?"|"\""|"\\n"
+
+
+%%
+
+{DIGIT}+ {
+ printf("<span class=\"number\">%s</span>", yytext);
+ }
+{KEYWORD} printf("<span class=\"keyword\">%s</span>", yytext);
+
+(".") printf("<span class=\"string\">%s</span>", yytext);
+
+{ID} printf("<span class=\"identifier\">%s</span>", yytext);
+
+(--.) printf("<span class=\"comment\">%s</span>", yytext);
+
+{OPERATOR} printf("<span class=\"operator\">%s</span>", yytext);
+
+[ \t\n]+ printf("%s", yytext);
+
+. printf( "Unrecognized character: %s\n", yytext );
+
+%%
+int yywrap()
+{
+ return 1;
+}
+int main(int argc, const char* argv[])
+{
+ if ( argc > 0 )
+ yyin = fopen( "markov_chain.lua", "r" );
+ else
+ yyin = stdin;
+ puts(
+ "<!doctype>"
+ "<html>"
+ "<head>"
+ " <title>markov_chain.lua</title>"
+ " <style>"
+ " .keyword {"
+ " color: red;"
+ " }"
+ " .identifier {"
+ " color: purple;"
+ " }"
+ " .string {"
+ " color: orange;"
+ " }"
+
+ " .number {"
+ " color: blue;"
+ " }"
+ " .string {"
+ " color: green;"
+ " }"
+ " .operator {"
+ " font-style: bold;"
+ " }"
+ " .comment {"
+ " color: gray;"
+ " }"
+ " </style>"
+ "</head>"
+ "<body>"
+ " <pre class=\"code\">"
+ );
+ yylex();
+ puts("</pre></body></html>");
+ return 0;
+}
diff --git a/homework/9MI0800164/Homework1_9MI0800164/markov_chain.lua b/homework/9MI0800164/Homework1_9MI0800164/markov_chain.lua
new file mode 100644
index 0000000..2750c97
--- /dev/null
+++ b/homework/9MI0800164/Homework1_9MI0800164/markov_chain.lua
@@ -0,0 +1,59 @@
+-- Markov Chain Program in Lua
+
+function allwords ()
+ local line = io.read() -- current line
+ local pos = 1 -- current position in the line
+ return function () -- iterator function
+ while line do -- repeat while there are lines
+ local s, e = string.find(line, "%w+", pos)
+ if s then -- found a word?
+ pos = e + 1 -- update next position
+ return string.sub(line, s, e) -- return the word
+ else
+ line = io.read() -- word not found; try next line
+ pos = 1 -- restart from first position
+ end
+ end
+ return nil -- no more lines: end of traversal
+ end
+end
+
+function prefix (w1, w2)
+ return w1 .. ' ' .. w2
+end
+
+local statetab
+
+function insert (index, value)
+ if not statetab[index] then
+ statetab[index] = {n=0}
+ end
+ table.insert(statetab[index], value)
+end
+
+local N = 2
+local MAXGEN = 10000
+local NOWORD = "\n"
+
+-- build table
+statetab = {}
+local w1, w2 = NOWORD, NOWORD
+for w in allwords() do
+ insert(prefix(w1, w2), w)
+ w1 = w2; w2 = w;
+end
+insert(prefix(w1, w2), NOWORD)
+
+
+-- generate text
+w1 = NOWORD; w2 = NOWORD -- reinitialize
+for i=1,MAXGEN do
+ local list = statetab[prefix(w1, w2)]
+ -- choose a random item from list
+ local r = math.random(table.getn(list))
+ local nextword = list[r]
+ if nextword == NOWORD then return end
+ io.write(nextword, " ")
+ w1 = w2; w2 = nextword
+end
+
diff --git a/homework/9MI0800164/Homework1_9MI0800164/result.html b/homework/9MI0800164/Homework1_9MI0800164/result.html
new file mode 100644
index 0000000..f84c673
--- /dev/null
+++ b/homework/9MI0800164/Homework1_9MI0800164/result.html
@@ -0,0 +1,61 @@
+<!doctype><html><head> <title>markov_chain.lua</title> <style> .keyword { color: red; } .identifier { color: purple; } .string { color: orange; } .number { color: blue; } .string { color: green; } .operator { font-style: bold; } .comment { color: gray; } </style></head><body> <pre class="code">
+<span class="comment">-- </span><span class="identifier">Markov</span> <span class="identifier">Chain</span> <span class="identifier">Program</span> <span class="keyword">in</span> <span class="identifier">Lua</span>
+
+<span class="keyword">function</span> <span class="identifier">allwords</span> <span class="operator">(</span><span class="operator">)</span>
+ <span class="keyword">local</span> <span class="identifier">line</span> <span class="operator">=</span> <span class="identifier">io</span><span class="string">.</span><span class="identifier">read</span><span class="operator">(</span><span class="operator">)</span> <span class="comment">-- </span><span class="identifier">current</span> <span class="identifier">line</span>
+ <span class="keyword">local</span> <span class="identifier">pos</span> <span class="operator">=</span> <span class="number">1</span> <span class="comment">-- </span><span class="identifier">current</span> <span class="identifier">position</span> <span class="keyword">in</span> <span class="identifier">the</span> <span class="identifier">line</span>
+ <span class="keyword">return</span> <span class="keyword">function</span> <span class="operator">(</span><span class="operator">)</span> <span class="comment">-- </span><span class="identifier">iterator</span> <span class="keyword">function</span>
+ <span class="keyword">while</span> <span class="identifier">line</span> <span class="keyword">do</span> <span class="comment">-- </span><span class="keyword">repeat</span> <span class="keyword">while</span> <span class="identifier">there</span> <span class="identifier">are</span> <span class="identifier">lines</span>
+ <span class="keyword">local</span> <span class="identifier">s</span><span class="operator">,</span> <span class="identifier">e</span> <span class="operator">=</span> <span class="identifier">string</span><span class="string">.</span><span class="identifier">find</span><span class="operator">(</span><span class="identifier">line</span><span class="operator">,</span> <span class="operator">"</span><span class="operator">%</span><span class="identifier">w</span><span class="operator">+</span><span class="operator">"</span><span class="operator">,</span> <span class="identifier">pos</span><span class="operator">)</span>
+ <span class="keyword">if</span> <span class="identifier">s</span> <span class="keyword">then</span> <span class="comment">-- </span><span class="identifier">found</span> <span class="identifier">a</span> <span class="identifier">word</span><span class="operator">?</span>
+ <span class="identifier">pos</span> <span class="operator">=</span> <span class="identifier">e</span> <span class="operator">+</span> <span class="number">1</span> <span class="comment">-- </span><span class="identifier">update</span> <span class="identifier">next</span> <span class="identifier">position</span>
+ <span class="keyword">return</span> <span class="identifier">string</span><span class="string">.</span><span class="identifier">sub</span><span class="operator">(</span><span class="identifier">line</span><span class="operator">,</span> <span class="identifier">s</span><span class="operator">,</span> <span class="identifier">e</span><span class="operator">)</span> <span class="comment">-- </span><span class="keyword">return</span> <span class="identifier">the</span> <span class="identifier">word</span>
+ <span class="keyword">else</span>
+ <span class="identifier">line</span> <span class="operator">=</span> <span class="identifier">io</span><span class="string">.</span><span class="identifier">read</span><span class="operator">(</span><span class="operator">)</span> <span class="comment">-- </span><span class="identifier">word</span> <span class="keyword">not</span> <span class="identifier">found</span><span class="operator">;</span> <span class="identifier">try</span> <span class="identifier">next</span> <span class="identifier">line</span>
+ <span class="identifier">pos</span> <span class="operator">=</span> <span class="number">1</span> <span class="comment">-- </span><span class="identifier">restart</span> <span class="identifier">from</span> <span class="identifier">first</span> <span class="identifier">position</span>
+ <span class="keyword">end</span>
+ <span class="keyword">end</span>
+ <span class="keyword">return</span> <span class="keyword">nil</span> <span class="comment">-- </span><span class="identifier">no</span> <span class="identifier">more</span> <span class="identifier">lines</span><span class="operator">:</span> <span class="keyword">end</span> <span class="identifier">of</span> <span class="identifier">traversal</span>
+ <span class="keyword">end</span>
+<span class="keyword">end</span>
+
+<span class="keyword">function</span> <span class="identifier">prefix</span> <span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span>
+ <span class="keyword">return</span> <span class="identifier">w1</span> <span class="operator">..</span> <span class="operator">'</span> <span class="operator">'</span> <span class="operator">..</span> <span class="identifier">w2</span>
+<span class="keyword">end</span>
+
+<span class="keyword">local</span> <span class="identifier">statetab</span>
+
+<span class="keyword">function</span> <span class="identifier">insert</span> <span class="operator">(</span><span class="identifier">index</span><span class="operator">,</span> <span class="identifier">value</span><span class="operator">)</span>
+ <span class="keyword">if</span> <span class="keyword">not</span> <span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">index</span><span class="operator">]</span> <span class="keyword">then</span>
+ <span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">index</span><span class="operator">]</span> <span class="operator">=</span> <span class="operator">{</span><span class="identifier">n</span><span class="operator">=</span><span class="number">0</span><span class="operator">}</span>
+ <span class="keyword">end</span>
+ <span class="identifier">table</span><span class="string">.</span><span class="identifier">insert</span><span class="operator">(</span><span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">index</span><span class="operator">]</span><span class="operator">,</span> <span class="identifier">value</span><span class="operator">)</span>
+<span class="keyword">end</span>
+
+<span class="keyword">local</span> <span class="identifier">N</span> <span class="operator">=</span> <span class="number">2</span>
+<span class="keyword">local</span> <span class="identifier">MAXGEN</span> <span class="operator">=</span> <span class="number">10000</span>
+<span class="keyword">local</span> <span class="identifier">NOWORD</span> <span class="operator">=</span> <span class="operator">"</span><span class="operator">\n</span><span class="operator">"</span>
+
+<span class="comment">-- </span><span class="identifier">build</span> <span class="identifier">table</span>
+<span class="identifier">statetab</span> <span class="operator">=</span> <span class="operator">{</span><span class="operator">}</span>
+<span class="keyword">local</span> <span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">NOWORD</span><span class="operator">,</span> <span class="identifier">NOWORD</span>
+<span class="keyword">for</span> <span class="identifier">w</span> <span class="keyword">in</span> <span class="identifier">allwords</span><span class="operator">(</span><span class="operator">)</span> <span class="keyword">do</span>
+ <span class="identifier">insert</span><span class="operator">(</span><span class="identifier">prefix</span><span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span><span class="operator">,</span> <span class="identifier">w</span><span class="operator">)</span>
+ <span class="identifier">w1</span> <span class="operator">=</span> <span class="identifier">w2</span><span class="operator">;</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">w</span><span class="operator">;</span>
+<span class="keyword">end</span>
+<span class="identifier">insert</span><span class="operator">(</span><span class="identifier">prefix</span><span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span><span class="operator">,</span> <span class="identifier">NOWORD</span><span class="operator">)</span>
+
+
+<span class="comment">-- </span><span class="identifier">generate</span> <span class="identifier">text</span>
+<span class="identifier">w1</span> <span class="operator">=</span> <span class="identifier">NOWORD</span><span class="operator">;</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">NOWORD</span> <span class="comment">-- </span><span class="identifier">reinitialize</span>
+<span class="keyword">for</span> <span class="identifier">i</span><span class="operator">=</span><span class="number">1</span><span class="operator">,</span><span class="identifier">MAXGEN</span> <span class="keyword">do</span>
+ <span class="keyword">local</span> <span class="identifier">list</span> <span class="operator">=</span> <span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">prefix</span><span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span><span class="operator">]</span>
+ <span class="comment">-- </span><span class="identifier">choose</span> <span class="identifier">a</span> <span class="identifier">random</span> <span class="identifier">item</span> <span class="identifier">from</span> <span class="identifier">list</span>
+ <span class="keyword">local</span> <span class="identifier">r</span> <span class="operator">=</span> <span class="identifier">math</span><span class="string">.</span><span class="identifier">random</span><span class="operator">(</span><span class="identifier">table</span><span class="string">.</span><span class="identifier">getn</span><span class="operator">(</span><span class="identifier">list</span><span class="operator">)</span><span class="operator">)</span>
+ <span class="keyword">local</span> <span class="identifier">nextword</span> <span class="operator">=</span> <span class="identifier">list</span><span class="operator">[</span><span class="identifier">r</span><span class="operator">]</span>
+ <span class="keyword">if</span> <span class="identifier">nextword</span> <span class="operator">==</span> <span class="identifier">NOWORD</span> <span class="keyword">then</span> <span class="keyword">return</span> <span class="keyword">end</span>
+ <span class="identifier">io</span><span class="string">.</span><span class="identifier">write</span><span class="operator">(</span><span class="identifier">nextword</span><span class="operator">,</span> <span class="operator">"</span> <span class="operator">"</span><span class="operator">)</span>
+ <span class="identifier">w1</span> <span class="operator">=</span> <span class="identifier">w2</span><span class="operator">;</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">nextword</span>
+<span class="keyword">end</span>
+
+</pre></body></html>