diff --git a/homework/0MI0800028/commonlisp2html/commonlisp2html.l b/homework/0MI0800028/commonlisp2html/commonlisp2html.l
new file mode 100644
index 00000000..46447b1d
--- /dev/null
+++ b/homework/0MI0800028/commonlisp2html/commonlisp2html.l
@@ -0,0 +1,56 @@
+%{
+
+%}
+
+DIGIT [0-9]
+BRACKET \(|\)
+
+STR \"([^\"]|\\\")*([^\\]|\\\\)\"
+NUMBERS [^A-z](\+|-)?{DIGIT}+(\.{DIGIT}+(e{DIGIT}+|d{DIGIT}+|e-{DIGIT}+)?|\/{DIGIT}+)?
+
+COMMENT ;.*$
+PARAMETER_TYPE &[0-9A-z]+
+KEYWORD :[0-9A-z]+
+CONSTANTS T|NIL|pi|t
+
+SPECIAL_FORM block|function|if|let|quote|return-from|defun|demacro
+
+/* Functions */
+F_ARITHMETIC "+ "|"- "|"* "|\/|1\+|1-|conjugate|gcd|lcm
+F_NUM_COMPARISON =|\/=|<|>|<=|>=|max|min
+F_TRIGONOMETRIC sin|cos|tan|cis|asin|acos|atan|sinh|cosh|tanh|asinh|acosh|atanh
+F_OTHER_MATH abs|sqrt|phase|signum
+F_LOGICAL not
+F_LISTS list
+F_OTHER format
+
+/* Macros */
+M_ARITHMETIC incf|decf
+M_LOGICAL and|or
+M_CONDITIONAL when|unless|cond|case|typecase
+M_DECLARE defvar|defparameter|defconstant|defun
+
+/* Not in spec, but commonly followed */
+GLOBAL_VAR \*([0-9A-z.?-_])+\*
+CONST_VAR \+([0-9A-z.?-_])+\+
+
+%%
+
+{BRACKET} { printf("%s", yytext); }
+{STR} { printf("%s", yytext); }
+{NUMBERS} { printf("%s", yytext); }
+{COMMENT} { printf("", yytext); }
+{PARAMETER_TYPE} { printf("%s", yytext); }
+{KEYWORD} { printf("%s", yytext); }
+{CONSTANTS} { printf("%s", yytext); }
+
+{SPECIAL_FORM} { printf("%s", yytext); }
+{F_ARITHMETIC}|{F_NUM_COMPARISON}|{F_TRIGONOMETRIC}|{F_TRIGONOMETRIC}|{F_OTHER_MATH}|{F_LOGICAL}|{F_LISTS}|{F_OTHER} { printf("%s", yytext); }
+{M_ARITHMETIC}|{M_LOGICAL}|{M_CONDITIONAL}|{M_DECLARE} { printf("%s", yytext); }
+
+{GLOBAL_VAR}|{CONST_VAR} { printf("%s", yytext); }
+
+ /* flex catches the longest possibility, so if some variable name contains a known word (function, macro, etc.), this will prevent it from highlighting */
+[A-z]+ { printf("%s", yytext); }
+
+%%
diff --git a/homework/0MI0800028/commonlisp2html/example.lisp b/homework/0MI0800028/commonlisp2html/example.lisp
new file mode 100644
index 00000000..cd7a5773
--- /dev/null
+++ b/homework/0MI0800028/commonlisp2html/example.lisp
@@ -0,0 +1,21 @@
+(defvar *NAME* "John")
+(defvar *AGE* 23)
+(defvar *ABOUT* " T NIL cond decf block")
+
+;;; This is a stupid funciton
+(defun adult? ()
+ (>= *AGE* 18))
+
+(defun will-I-graduate? ()
+ NIL)
+
+(defun distance (p1 p2)
+ (sqrt (* p1 p1) (* p2 p2)))
+
+(defun bar (a b)
+ (if (and (> b a) (<= 10 b))
+ (format t "Valid")
+ (format t "Invalid")))
+
+(defun foo (&key ((:apple a)) ((:box b) 0) ((:charlie c) 0 c-supplied-p))
+ (list a b c c-supplied-p))
diff --git a/homework/0MI0800028/commonlisp2html/lexer.sh b/homework/0MI0800028/commonlisp2html/lexer.sh
new file mode 100755
index 00000000..39bc21d7
--- /dev/null
+++ b/homework/0MI0800028/commonlisp2html/lexer.sh
@@ -0,0 +1,20 @@
+#! /bin/bash
+
+if [ "$1" = "-b" ]; then
+ shift
+ flex $@
+ gcc lex.yy.c -lfl
+fi
+
+if [ "$1" = "-r" ]; then
+ shift
+ ./a.out < $@
+fi
+
+if [ "$1" = "-p" ]; then
+ filename="highlighted.html"
+ cat ./page_top.html > $filename
+ shift
+ ./a.out < $@ >> $filename
+ cat ./page_bottom.html >> $filename
+fi
diff --git a/homework/0MI0800028/commonlisp2html/page_bottom.html b/homework/0MI0800028/commonlisp2html/page_bottom.html
new file mode 100644
index 00000000..073ae297
--- /dev/null
+++ b/homework/0MI0800028/commonlisp2html/page_bottom.html
@@ -0,0 +1,3 @@
+
+