Mercurial > repos > rhope
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 >>] }