diff parser_old.rhope @ 36:495dddadd058

User defined types work in the compiler now
author Mike Pavone <pavone@retrodev.com>
date Sat, 03 Oct 2009 03:18:15 -0400
parents 3498713c3dc9
children 640f541e9116
line wrap: on
line diff
--- a/parser_old.rhope	Wed Sep 30 23:55:04 2009 -0400
+++ b/parser_old.rhope	Sat Oct 03 03:18:15 2009 -0400
@@ -908,6 +908,25 @@
 	}
 }
 
+Blueprint Type Literal
+{
+	Name
+	Params
+}
+
+Type Literal[name:out]
+{
+	Print["Type Literal"]
+	out <- [[Build["Type Literal"]]Name <<[name]]Params <<[()]
+}
+
+Parse Params@Type Literal[literal,params,string:out,after]
+{
+	Print[["Parse Params: "]Append[ [string]Slice[10] ]]
+	plist,after <- Parse List[string,params,()]
+	out <- [literal]Params <<[plist]
+}
+
 Named Pipe or Literal[string,params:out,after]
 {
 	name <- Comment Left Trim[string, "\n\r\t ", params]
@@ -925,38 +944,47 @@
 			{
 				value,after <- Parse Number[name, params]
 			}{
-				delims <- [[[[[[("\n")]Append[[params]Block Begin >>]]Append[[params]Block End >>]]Append[[params]Empty Block >>]]Append[[params]Arg End >>]]Append[[params]List Delim >>]]Append[[params]List End >>]
-				afterdelim,raw before,delim <- [name]Get Comment DString[delims, params]
+				delims <- [[[[[[[("\n")]Append[[params]Block Begin >>]]Append[[params]Block End >>]]Append[[params]Empty Block >>]]Append[[params]Arg End >>]]Append[[params]List Delim >>]]Append[[params]List End >>]]Append[[params]List Begin >>]
+				afterdelim,raw before,delim,nodelim <- [name]Get Comment DString[delims, params]
+
+				before <- Trim[raw before, "\r\n\t "]
+				If[[delim] = [[params]List Begin >>]]
 				{
-					after <- [delim]Append[~]
-				} {} {} { 
-					after <- ""
-				}
-				before <- Trim[raw before, "\r\n\t "]
-				If[[before] = ["Yes"]]
-				{
-					yesno <- Yes
+					value,after <- [Type Literal[before]]Parse Params[params,afterdelim]
 				}{
-					If[[before] = ["No"]]
+					Val[afterdelim]
+					{
+						after <- [delim]Append[~]
+					}
+					Val[nodelim]
+					{
+						after <- ""
+					}
+					If[[before] = ["Yes"]]
 					{
-						yesno <- No
+						yesno <- Yes
 					}{
-						If[[before] = [""]]
+						If[[before] = ["No"]]
 						{
-							Print[[["Found "]Append[delim]]Append[" where a named pipe or literal was expected"]]
-							{ Print[["Near: "]Append[ [afterdelim]Slice[40]]] }
+							yesno <- No
 						}{
-							If[[before]Contains[[params]Global Separator >>]]
+							If[[before] = [""]]
 							{
-								parts <- [before]Split[[params]Global Separator >>]
-								out <- New@Global Node[Right Trim[[parts]Index[0],"\r\n\t "], Trim[[parts]Index[1], "\r\n\t "]]
+								Print[[["Found "]Append[delim]]Append[" where a named pipe or literal was expected"]]
+								{ Print[["Near: "]Append[ [afterdelim]Slice[40]]] }
 							}{
-								out <- New@Named Pipe Node[Right Trim[before,"\r\n\t "]]
+								If[[before]Contains[[params]Global Separator >>]]
+								{
+									parts <- [before]Split[[params]Global Separator >>]
+									out <- New@Global Node[Right Trim[[parts]Index[0],"\r\n\t "], Trim[[parts]Index[1], "\r\n\t "]]
+								}{
+									out <- New@Named Pipe Node[Right Trim[before,"\r\n\t "]]
+								}
 							}
 						}
 					}
+					out <- New@Literal Node[yesno]
 				}
-				out <- New@Literal Node[yesno]
 			}
 		}
 	}
@@ -1023,9 +1051,9 @@
 		}{
 			If[[delim] = [[params]Empty Block >>]]
 			{
-				after expression <- Val[aftere]
+				after <- Val[aftere]
 			}{
-				,after expression <- [after args]Slice[[before]Length]
+				,after <- [after args]Slice[[before]Length]
 			}
 			expression <- Worker or Field[Trim[before,"\r\n\t "], args, params]
 		}
@@ -1235,6 +1263,11 @@
 	}
 }
 
+Add Blueprint Compile[prog,def:out]
+{
+	out <- [prog]Bind Blueprint[[def]Name >>, Fold["Add Blueprint Field", NBlueprint[], [def]Fields >>]]
+}
+
 _Tree to Program[parse tree,program:out]
 {
 	after blueprint <- Fold["Add Blueprint", program, [parse tree]Blueprints >>]
@@ -1260,7 +1293,7 @@
 
 Tree to Program Native[parse tree:out]
 {
-	registered <- Fold["Register Workers Compile", [NProgram[]]Register Builtins, [parse tree]Workers >>]
+	registered <- Fold["Register Workers Compile", Fold["Add Blueprint Compile", [NProgram[]]Register Builtins, [parse tree]Blueprints >>], [parse tree]Workers >>]
 	out <- Fold["Add Workers Compile", registered, [parse tree]Workers >>]
 }