summaryrefslogtreecommitdiff
path: root/test/http/http.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/http/http.lm')
-rw-r--r--test/http/http.lm68
1 files changed, 68 insertions, 0 deletions
diff --git a/test/http/http.lm b/test/http/http.lm
new file mode 100644
index 00000000..d914ab6f
--- /dev/null
+++ b/test/http/http.lm
@@ -0,0 +1,68 @@
+#
+# Character classes
+#
+rl CTL /0..31 | 127/
+rl CR /13/
+rl LF /10/
+rl SP /32/
+rl HT /9/
+rl CHAR /0..127/
+
+rl separators / '(' | ')' | '<' | '>'
+ | '@' | ',' | ';' | ':' | '\\'
+ | '"' | '/' | '[' | ']' | '?'
+ | '=' | '{' | '}' | SP | HT /
+
+rl token_char /CHAR - CTL - separators/
+
+#
+# Literal tokens
+#
+
+literal 'HTTP/', ' ', ':'
+token CRLF /CR LF/
+
+#
+# Request Line
+#
+
+token method /token_char+/
+
+token request_uri /(^SP)+/
+
+token http_number /digit+ '.' digit+/
+
+def http_version
+ [ 'HTTP/' http_number ]
+
+def request_line
+ [method ' ' request_uri
+ ' ' http_version CRLF]
+
+#
+# Header
+#
+
+token field_name /token_char+/
+
+token field_value
+ /(^(CR|LF) | CR LF (SP|HT))* CR LF/
+
+def header
+ [field_name ':' field_value]
+
+#
+# Request
+#
+
+def request
+ [request_line header* CRLF]
+
+request R = parse_stop request( stdin )
+
+print( 'HTTP/1.0 200 OK\r\n' )
+print( 'Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n' )
+print( 'Content-Type: text/plain\r\n' )
+print( '\r\n' )
+print_xml( R )
+