Mercurial > repos > rhope
diff parser_old.rhope @ 48:a24eb366195c
Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 02 Mar 2010 00:18:49 -0500 |
parents | aabda74c7a88 |
children | 3e20ed8959c4 |
line wrap: on
line diff
--- a/parser_old.rhope Tue Dec 22 01:22:09 2009 -0500 +++ b/parser_old.rhope Tue Mar 02 00:18:49 2010 -0500 @@ -67,7 +67,7 @@ ]Global Separator <<["::"] ]Hex Escape <<["x"] ]Uses <<["uses"] - ]Escape Map <<[[[[New@Dictionary[]]Set["n","\n"]]Set["r","\r"]]Set["t","\t"]] + ]Escape Map <<[[[[Dictionary[]]Set["n","\n"]]Set["r","\r"]]Set["t","\t"]] } Blueprint Output Reference @@ -85,7 +85,7 @@ { reflist <- [refs]Index[name] {} { - reflist <- New@List[] + reflist <- () } out <- [refs]Set[name, [reflist]Append[reference]] } @@ -111,9 +111,9 @@ New@Parse Program[:out] { out <- [[[Build["Parse Program"] - ]Workers <<[New@Dictionary[]] - ]Imports <<[New@Dictionary[]] - ]Blueprints <<[New@Dictionary[]] + ]Workers <<[Dictionary[]] + ]Imports <<[[Dictionary[]]Set["kernel.rhope", Yes]] + ]Blueprints <<[Dictionary[]] } Blueprint Blueprint Definition @@ -141,7 +141,7 @@ New@Parse Worker[name,inputs,outputs,intypes,outtypes,line:out] { - out <- [[[[[[[[Build["Parse Worker"]]Name <<[name]]Inputs <<[inputs]]Outputs <<[outputs]]Line Number <<[line]]Trees <<[New@List[]]]Uses Stores <<[New@List[]]]Input Types <<[intypes]]Output Types <<[outtypes] + out <- [[[[[[[[Build["Parse Worker"]]Name <<[name]]Inputs <<[inputs]]Outputs <<[outputs]]Line Number <<[line]]Trees <<[()]]Uses Stores <<[()]]Input Types <<[intypes]]Output Types <<[outtypes] } Blueprint Worker Node @@ -155,7 +155,7 @@ New@Worker Node[name,params:out] { - out <- [[[[Build["Worker Node"]]Name <<[name]]Params <<[params]]Assignments <<[New@List[]]]Blocks <<[New@List[]] + out <- [[[[Build["Worker Node"]]Name <<[name]]Params <<[params]]Assignments <<[()]]Blocks <<[()] } Add List Helper[inlist,worker,program,key,parse worker,refs:out list,out worker,out refs] @@ -417,7 +417,7 @@ New@Field Node[name,params,set:out] { - out <- [[[[[Build["Field Node"]]Name <<[name]]Assignments <<[New@List[]]]Blocks <<[New@List[]]]Set? <<[set]]Params <<[params] + out <- [[[[[Build["Field Node"]]Name <<[name]]Assignments <<[()]]Blocks <<[()]]Set? <<[set]]Params <<[params] } Add to Worker@Field Node[node,worker,program,parse worker,refs:out node,out worker,out refs] @@ -474,7 +474,7 @@ New@Named Pipe Node[name:out] { - out <- [[[Build["Named Pipe Node"]]Name <<[name]]Assignments <<[New@List[]]]Blocks <<[New@List[]] + out <- [[[Build["Named Pipe Node"]]Name <<[name]]Assignments <<[()]]Blocks <<[()] } Add to Worker@Named Pipe Node[node,worker,program,parse worker,refs:out node,out worker,out refs] @@ -551,7 +551,7 @@ New@Global Node[store,name:out] { - out <- [[[[Build["Global Node"]]Store <<[store]]Name <<[name]]Assignments <<[New@List[]]]Blocks <<[New@List[]] + out <- [[[[Build["Global Node"]]Store <<[store]]Name <<[name]]Assignments <<[()]]Blocks <<[()] } Add to Worker@Global Node[node,worker,unused,parse worker,refs:out node,out worker,refs] @@ -589,7 +589,7 @@ New@Literal Node[value:out] { - out <- [[[Build["Literal Node"]]Value <<[value]]Assignments <<[New@List[]]]Blocks <<[New@List[]] + out <- [[[Build["Literal Node"]]Value <<[value]]Assignments <<[()]]Blocks <<[()] } Add to Worker@Literal Node[node,worker,unused,parse worker,refs:out node,out worker,out refs] @@ -706,7 +706,7 @@ { If[[block count] > [0]] { - after, before <- [string]Get DString[[[New@List[]]Append[begin comment]]Append[end comment]] {} {} + after, before <- [string]Get DString[[[()]Append[begin comment]]Append[end comment]] {} {} { If[[~] = [begin comment]] { @@ -804,7 +804,7 @@ { body lines <- [body]Split["\n"] more lines <- [[[body lines]Length] - [1]] + [name lines] - fields <- Fold[["Process Blueprint Field"]Set Input[2, params], New@List[], Filter[Map[body lines, ["Trim"]Set Input[1,"\n\r\t "]], "Filter Empty"]] + fields <- Fold[["Process Blueprint Field"]Set Input[2, params], (), Filter[Map[body lines, ["Trim"]Set Input[1,"\n\r\t "]], "Filter Empty"]] new tree <- [tree]Blueprints << [ [[tree]Blueprints >>]Set[name, New@Blueprint Definition[name, fields]] ] out <- Null[~, params, new tree, [lines] + [more lines]] } {} { @@ -837,7 +837,7 @@ If[[check block]Starts With[[params]Block Begin >>]] { ,begin block <- [check block]Slice[[[params]Block Begin >>]Length] - trees, after block <- Worker Body[begin block, params, New@List[]] + trees, after block <- Worker Body[begin block, params, ()] blocks, after <- Get Expression Blocks[after block, params, [blocks]Append[trees]] }{ If[[check block]Starts With[[params]Empty Block >>]] @@ -869,7 +869,7 @@ Parse String[string,params,current:value,after] { - delims <- [[New@List[]]Append[[params]String End >>]]Append[[params]String Escape >>] + delims <- [[()]Append[[params]String End >>]]Append[[params]String Escape >>] afters, before, delim <- [string]Get Comment DString[delims, params] { If[[delim] = [[params]String End >>]] @@ -952,7 +952,7 @@ If[[name]Starts With[[params]List Begin >>]] { ,list start <- [name]Slice[[[params]List Begin >>]Length] - value,after <- Parse List[list start, params, New@List[]] + value,after <- Parse List[list start, params, ()] }{ If[[[name]Slice[1]]In["-0123456789"]] { @@ -1055,7 +1055,7 @@ Postfix or Infix[string,params:expression,after] { - args, after args <- Parse Arguments[string, params, New@List[]] + args, after args <- Parse Arguments[string, params, ()] delims <- [[[[[("\n")]Append[[params]Arg Begin >>]]Append[[params]Empty Block >>]]Append[[params]Block Begin >>]]Append[[params]Arg End >>]]Append[[params]List Delim >>] aftere,before,delim <- [after args]Get Comment DString[delims, params] { @@ -1093,7 +1093,7 @@ after expression <- [after literal]Append[[delim]Append[after]] expression, after literal <- Named Pipe or Literal[Right Trim[before, "\r\n\t "], params] }{ - expression, after expression <- Prefix[after, params, maybe name, New@List[]] + expression, after expression <- Prefix[after, params, maybe name, ()] } } }{ @@ -1125,7 +1125,7 @@ } //Any expression can be followed by one or more blocks mapping the inputs of other expressions //to the outputs of the current one - blocks,after blocks <- Get Expression Blocks[after expression, params, New@List[]] + blocks,after blocks <- Get Expression Blocks[after expression, params, ()] final expression <- [expression]Blocks <<[blocks] } } @@ -1236,7 +1236,7 @@ Print[["Parsing worker: "]Append[worker name]] in out <- [params]In Out Delim >> arg end <- [params]Arg End >> - delims <- [[New@List[]]Append[in out]]Append[arg end] + delims <- [[()]Append[in out]]Append[arg end] after <- [~]Get Comment DString[delims, params] {} { arglist <- Trim[~,"\r\n\t "] @@ -1268,7 +1268,7 @@ Print["Got parse worker"] body text, modifiers <- [after arglist]Get Comment DString[[params]Block Begin >>, params] modified <- Process Modifiers[~, params, modifiers] - expression trees, after body <- Worker Body[body text, params, New@List[]] + expression trees, after body <- Worker Body[body text, params, ()] worker <- [modified]Trees <<[expression trees] new worker dict <- [[tree]Workers >>]Set[worker name, worker] out <- Null[after body, params, [tree]Workers <<[new worker dict], 0] @@ -1318,7 +1318,7 @@ { Print[["Add Workers Compile: "]Append[name]] { - trees, nworker, refs <- Add List to Worker[[worker]Trees >>, [NWorker["rhope"]]Uses[[worker]Uses Stores >>], prog, worker, New@Dictionary[]] + trees, nworker, refs <- Add List to Worker[[worker]Trees >>, [NWorker["rhope"]]Uses[[worker]Uses Stores >>], prog, worker, Dictionary[]] final nworker <- Fold[[["Add Wires Helper"]Set Input[3, worker]]Set Input[4, refs], nworker, trees] out <- [prog]Bind Worker[name, final nworker] } @@ -1328,7 +1328,7 @@ { Print["Add Wires Helper"] { - out <- [node]Add Wires[worker, New@List[], parse worker, assignments] + out <- [node]Add Wires[worker, (), parse worker, assignments] { Print["Add Wires Helper Done"] } } } @@ -1337,7 +1337,7 @@ { Print[["Add Contents: "]Append[name]] worker <- [[program]Find Worker[name]]Uses[[parse worker]Uses Stores >>] - trees, contents worker, refs <- Add List to Worker[[parse worker]Trees >>, worker, program, parse worker, New@Dictionary[]] + trees, contents worker, refs <- Add List to Worker[[parse worker]Trees >>, worker, program, parse worker, Dictionary[]] Fold[[["Add Wires Helper"]Set Input[3, parse worker]]Set Input[4, refs], contents worker, trees] out <- [parse worker]Trees <<[trees] key <- name @@ -1380,13 +1380,13 @@ Tree to Program[parse tree:out] { Print["Tree to Program"] - out <- _Tree to Program[parse tree, [New@Program[]]Add Builtins] + out <- _Tree to Program[parse tree, [Program[]]Add Builtins] { Print["done"] } } Tree to Program Native[parse tree:out] { - registered <- Fold["Register Workers Compile", Fold["Add Blueprint Compile", [NProgram[]]Register Builtins, [parse tree]Blueprints >>], [parse tree]Workers >>] + registered <- Fold["Register Workers Compile", [Fold["Add Blueprint Compile", NProgram[], [parse tree]Blueprints >>]]Register Builtins, [parse tree]Workers >>] out <- Fold["Add Workers Compile", registered, [parse tree]Workers >>] { Print["Transformed AST to dataflow graph "] } } @@ -1411,7 +1411,7 @@ Process Imports[parse tree,params:out] { - needs import <- Fold["Needs Imports", New@List[], [parse tree]Imports >>] + needs import <- Fold["Needs Imports", (), [parse tree]Imports >>] If[[[needs import]Length] > [0]] { import tree <- Fold[["Do Import"]Set Input[3, params], parse tree, needs import] @@ -1476,16 +1476,16 @@ } }{ Print["Expression"] - trees <- Worker Body[[line]Append["}"], params, New@List[]] + trees <- Worker Body[[line]Append["}"], params, ()] { Print["Parse done"] } - tree <- [New@Worker Node["Val", [New@List[]]Append[[trees]Index[0]]]]Assignments <<[("__out")] + tree <- [New@Worker Node["Val", [()]Append[[trees]Index[0]]]]Assignments <<[("__out")] { Print["Constructed new tree"] } - this stores <- [[tree]Gather Stores[params, New@Dictionary[]]]Keys + this stores <- [[tree]Gather Stores[params, Dictionary[]]]Keys { Print["Got stores"] } next stores <- Fold["_Init Used Store", stores, this stores] { Print["Initialized stores"] - pworker <- [[New@Parse Worker["__Eval", New@List[], ("__out"), 0]]Trees <<[[New@List[]]Append[tree]]]Uses Stores <<[this stores] + pworker <- [[New@Parse Worker["__Eval", (), ("__out"), 0]]Trees <<[[()]Append[tree]]]Uses Stores <<[this stores] { Print["Constructed parse worker"] } } [[prog]Find Worker["__Eval"]]Clear @@ -1494,7 +1494,7 @@ Add Contents[pworker, "__Eval", prog] { Print["Added Contents"] - Pretty Print[[[[prog]Find Worker["__Eval"]]Do[New@List[]]]Index[0], ""] + Pretty Print[[[[prog]Find Worker["__Eval"]]Do[()]]Index[0], ""] { Print["Finished executeion"] _REPL[params, prog, next stores] } } } @@ -1506,7 +1506,7 @@ { Print["Rhope Alpha 2\nCopyright 2008 by Michael Pavone\nEntering interactive mode\n"] prog <- Tree to Program[Null["Val[in:out]\n{\n out <- in\n}\n__Eval[:__out]\n{\n}\n", params, New@Parse Program[], 0]] - _REPL[params, prog, New@Dictionary[]] + _REPL[params, prog, Dictionary[]] } Add If Store[stores,name,params:out]