Mercurial > repos > rhope
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 { |