comparison 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
comparison
equal deleted inserted replaced
35:3498713c3dc9 36:495dddadd058
906 value <- <String@Whole Number[valstring] 906 value <- <String@Whole Number[valstring]
907 } 907 }
908 } 908 }
909 } 909 }
910 910
911 Blueprint Type Literal
912 {
913 Name
914 Params
915 }
916
917 Type Literal[name:out]
918 {
919 Print["Type Literal"]
920 out <- [[Build["Type Literal"]]Name <<[name]]Params <<[()]
921 }
922
923 Parse Params@Type Literal[literal,params,string:out,after]
924 {
925 Print[["Parse Params: "]Append[ [string]Slice[10] ]]
926 plist,after <- Parse List[string,params,()]
927 out <- [literal]Params <<[plist]
928 }
929
911 Named Pipe or Literal[string,params:out,after] 930 Named Pipe or Literal[string,params:out,after]
912 { 931 {
913 name <- Comment Left Trim[string, "\n\r\t ", params] 932 name <- Comment Left Trim[string, "\n\r\t ", params]
914 If[[name]Starts With[[params]String Begin >>]] 933 If[[name]Starts With[[params]String Begin >>]]
915 { 934 {
923 }{ 942 }{
924 If[[[name]Slice[1]]In["-0123456789"]] 943 If[[[name]Slice[1]]In["-0123456789"]]
925 { 944 {
926 value,after <- Parse Number[name, params] 945 value,after <- Parse Number[name, params]
927 }{ 946 }{
928 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 >>] 947 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 >>]
929 afterdelim,raw before,delim <- [name]Get Comment DString[delims, params] 948 afterdelim,raw before,delim,nodelim <- [name]Get Comment DString[delims, params]
949
950 before <- Trim[raw before, "\r\n\t "]
951 If[[delim] = [[params]List Begin >>]]
930 { 952 {
931 after <- [delim]Append[~] 953 value,after <- [Type Literal[before]]Parse Params[params,afterdelim]
932 } {} {} {
933 after <- ""
934 }
935 before <- Trim[raw before, "\r\n\t "]
936 If[[before] = ["Yes"]]
937 {
938 yesno <- Yes
939 }{ 954 }{
940 If[[before] = ["No"]] 955 Val[afterdelim]
941 { 956 {
942 yesno <- No 957 after <- [delim]Append[~]
958 }
959 Val[nodelim]
960 {
961 after <- ""
962 }
963 If[[before] = ["Yes"]]
964 {
965 yesno <- Yes
943 }{ 966 }{
944 If[[before] = [""]] 967 If[[before] = ["No"]]
945 { 968 {
946 Print[[["Found "]Append[delim]]Append[" where a named pipe or literal was expected"]] 969 yesno <- No
947 { Print[["Near: "]Append[ [afterdelim]Slice[40]]] }
948 }{ 970 }{
949 If[[before]Contains[[params]Global Separator >>]] 971 If[[before] = [""]]
950 { 972 {
951 parts <- [before]Split[[params]Global Separator >>] 973 Print[[["Found "]Append[delim]]Append[" where a named pipe or literal was expected"]]
952 out <- New@Global Node[Right Trim[[parts]Index[0],"\r\n\t "], Trim[[parts]Index[1], "\r\n\t "]] 974 { Print[["Near: "]Append[ [afterdelim]Slice[40]]] }
953 }{ 975 }{
954 out <- New@Named Pipe Node[Right Trim[before,"\r\n\t "]] 976 If[[before]Contains[[params]Global Separator >>]]
977 {
978 parts <- [before]Split[[params]Global Separator >>]
979 out <- New@Global Node[Right Trim[[parts]Index[0],"\r\n\t "], Trim[[parts]Index[1], "\r\n\t "]]
980 }{
981 out <- New@Named Pipe Node[Right Trim[before,"\r\n\t "]]
982 }
955 } 983 }
956 } 984 }
957 } 985 }
986 out <- New@Literal Node[yesno]
958 } 987 }
959 out <- New@Literal Node[yesno]
960 } 988 }
961 } 989 }
962 } 990 }
963 out <- New@Literal Node[value] 991 out <- New@Literal Node[value]
964 } 992 }
1021 { 1049 {
1022 expression, after <- Prefix[aftere, params, Trim[before,"\r\n\t "], args] 1050 expression, after <- Prefix[aftere, params, Trim[before,"\r\n\t "], args]
1023 }{ 1051 }{
1024 If[[delim] = [[params]Empty Block >>]] 1052 If[[delim] = [[params]Empty Block >>]]
1025 { 1053 {
1026 after expression <- Val[aftere] 1054 after <- Val[aftere]
1027 }{ 1055 }{
1028 ,after expression <- [after args]Slice[[before]Length] 1056 ,after <- [after args]Slice[[before]Length]
1029 } 1057 }
1030 expression <- Worker or Field[Trim[before,"\r\n\t "], args, params] 1058 expression <- Worker or Field[Trim[before,"\r\n\t "], args, params]
1031 } 1059 }
1032 } 1060 }
1033 } 1061 }
1233 { 1261 {
1234 Fold["Add Blueprint Field", ~, [def]Fields >>] 1262 Fold["Add Blueprint Field", ~, [def]Fields >>]
1235 } 1263 }
1236 } 1264 }
1237 1265
1266 Add Blueprint Compile[prog,def:out]
1267 {
1268 out <- [prog]Bind Blueprint[[def]Name >>, Fold["Add Blueprint Field", NBlueprint[], [def]Fields >>]]
1269 }
1270
1238 _Tree to Program[parse tree,program:out] 1271 _Tree to Program[parse tree,program:out]
1239 { 1272 {
1240 after blueprint <- Fold["Add Blueprint", program, [parse tree]Blueprints >>] 1273 after blueprint <- Fold["Add Blueprint", program, [parse tree]Blueprints >>]
1241 [[parse tree]Workers >>]First 1274 [[parse tree]Workers >>]First
1242 { 1275 {
1258 { Print["done"] } 1291 { Print["done"] }
1259 } 1292 }
1260 1293
1261 Tree to Program Native[parse tree:out] 1294 Tree to Program Native[parse tree:out]
1262 { 1295 {
1263 registered <- Fold["Register Workers Compile", [NProgram[]]Register Builtins, [parse tree]Workers >>] 1296 registered <- Fold["Register Workers Compile", Fold["Add Blueprint Compile", [NProgram[]]Register Builtins, [parse tree]Blueprints >>], [parse tree]Workers >>]
1264 out <- Fold["Add Workers Compile", registered, [parse tree]Workers >>] 1297 out <- Fold["Add Workers Compile", registered, [parse tree]Workers >>]
1265 } 1298 }
1266 1299
1267 Needs Imports[needs import,not imported?,name:out] 1300 Needs Imports[needs import,not imported?,name:out]
1268 { 1301 {