Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
diff --git a/homework/0MI0800028/commonlisp2html/commonlisp2html.l b/homework/0MI0800028/commonlisp2html/commonlisp2html.l
new file mode 100644
index 0000000..46447b1
--- /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("<span class=\"bracket\">%s</span>", yytext); }
+{STR} { printf("<span class=\"string\">%s</span>", yytext); }
+{NUMBERS} { printf("<span class=\"number\">%s</span>", yytext); }
+{COMMENT} { printf("<span class=\"comment\">%s</span>", yytext); }
+{PARAMETER_TYPE} { printf("<span class=\"parameter-type\">%s</span>", yytext); }
+{KEYWORD} { printf("<span class=\"keyword\">%s</span>", yytext); }
+{CONSTANTS} { printf("<span class=\"constant\">%s</span>", yytext); }
+
+{SPECIAL_FORM} { printf("<span class=\"special-operator\">%s</span>", yytext); }
+{F_ARITHMETIC}|{F_NUM_COMPARISON}|{F_TRIGONOMETRIC}|{F_TRIGONOMETRIC}|{F_OTHER_MATH}|{F_LOGICAL}|{F_LISTS}|{F_OTHER} { printf("<span class=\"function\">%s</span>", yytext); }
+{M_ARITHMETIC}|{M_LOGICAL}|{M_CONDITIONAL}|{M_DECLARE} { printf("<span class=\"macro\">%s</span>", yytext); }
+
+{GLOBAL_VAR}|{CONST_VAR} { printf("<span class=\"variable\">%s</span>", 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 0000000..cd7a577
--- /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 0000000..39bc21d
--- /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 0000000..073ae29
--- /dev/null
+++ b/homework/0MI0800028/commonlisp2html/page_bottom.html
@@ -0,0 +1,3 @@
+ </pre></code>
+ </body>
+</html>
diff --git a/homework/0MI0800028/commonlisp2html/page_top.html b/homework/0MI0800028/commonlisp2html/page_top.html
new file mode 100644
index 0000000..e0b7a20
--- /dev/null
+++ b/homework/0MI0800028/commonlisp2html/page_top.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Highlighted code</title>
+ <style>
+ body {
+ font-size: 20px;
+ }
+ pre, code {
+ color: #ffd7af;
+ background-color: #1c1c1c;
+ }
+ .bracket {
+ color: #d47408;
+ }
+ .string {
+ color: #afaf00;
+ }
+ .number {
+ color: #d787af;
+ }
+ .comment {
+ color: #8a8a8a;
+ }
+ .parameter-type {
+ color: #87afaf;
+ }
+ .keyword {
+ color: #87af87;
+ }
+ .constant {
+ color: #9045ff;
+ }
+ .special-operator {
+ color: #5f8fd7;
+ }
+ .function {
+ color: #d75f5f;
+ }
+ .macro {
+ color: #73d75f;
+ }
+ .variable {
+ color: #ffaf00;
+ }
+ </style>
+ </head>
+ <body>
+ <pre><code>