r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Parse] Discussion of PARSE dialect

BrianH
1-Jul-2006
[1289]
Gabriele and I have worked extensively on such submissions.
Graham
1-Jul-2006
[1290x4]
Ok, Brian, this one seems to work :)
Hmm.  Another problem.  If the macro expansion contains newline characters 
ie. "^/", the returned text has "^/" in it
ros {ROS: ^/Gen: wt. stable,no fever,chills or night sweats^/CVS: 
neg cp, sob, pnd, orthopnea or dyspnea on exertion^/GI: neg constipation, 
bright red blood per rectum, or melena
I guess I need to form it before I add them to the macros block.
BrianH
1-Jul-2006
[1294]
Trim it.
Graham
1-Jul-2006
[1295]
the above macro is supposed to expand into a multiline statement.
BrianH
1-Jul-2006
[1296]
Then it is a good thing that the ^/ is in the expansion.
Graham
1-Jul-2006
[1297]
No, as it ends up on screen showing ^/ instead of a visual newline.
BrianH
1-Jul-2006
[1298]
Are they writing ^/ in the expansion text source data to indicate 
a newline?
Graham
1-Jul-2006
[1299x2]
Yes.  So, somehow I need to force the area field to recognise them 
as newlines and reformat the screen.
They're using ^/ as the macros are being read in from a text file 
using read/lines
BrianH
1-Jul-2006
[1301]
When you read the macro data, do this to the expansions:
replace/all expansion "^^/" "^/"
Graham
1-Jul-2006
[1302]
so, read/lines is escaping the ^/ ?
BrianH
1-Jul-2006
[1303]
No, it isn't. You have to yourself. Can you save the macro data in 
REBOL data format?
Graham
1-Jul-2006
[1304x3]
I guess so, but I want to make it easy for the users ...
but that works now :)
Thanks for the help guys
Henrik
9-Jul-2006
[1307x3]
how "local" are variables that are set during a parse? I was looking 
at Geomol's postscript.r and looked at:

coords: [err:
	(pos: none) [set pos pair! | set x number! set y number!] (
		either pos [
			append output compose [(pos/x) " " (pos/y) " lineto^/"]
		][
			append output compose [(x) " " (y) " lineto^/"]
		]
	)
]
but I can't get 'pos set in my own code in the () block after the 
parse block where 'pos is set.
that means it does get set inside the parse block, but it's set to 
none after the parse block again.
Anton
9-Jul-2006
[1310]
Is your code in the second parens actually ever executing ?
Henrik
9-Jul-2006
[1311]
yes, I try to print the variable and it just returns none.
Anton
9-Jul-2006
[1312]
Mmm let me make a few tests.
Henrik
9-Jul-2006
[1313]
actually, there is a difference between my code and this, which may 
be causing it:


I need to loop the block with 'any. I suspect the contents is lost 
after the first run.
Oldes
9-Jul-2006
[1314]
because you set it to none in the first parens
Anton
9-Jul-2006
[1315]
Yes the rule can only fail after the first parens.
Henrik
9-Jul-2006
[1316]
oldes: it makes no difference whether the first parens is left out 
or not
Anton
9-Jul-2006
[1317]
And to answer your question, the variables are just regular rebol 
words, so they are as local as you make them.
Oldes
9-Jul-2006
[1318x2]
and how looks the code you parse?
if the parse is inside function and you set pos in the function as 
a local - it will be local
Henrik
9-Jul-2006
[1320x2]
I'm parsing:

[image "String" image-word [action block]]
where 'image is always first and the remaining items may come in 
random order
Oldes
9-Jul-2006
[1322]
there is no pair and no numbers - the pos must be none
Henrik
9-Jul-2006
[1323]
oldes, my code is different from his. I used his as it's structurally 
similar to mine
Oldes
9-Jul-2006
[1324]
and what exactly do you want?
Henrik
9-Jul-2006
[1325]
I want to assign a variable to each element so I can process them 
later
Oldes
9-Jul-2006
[1326]
so for the block above it would assing what?
Henrik
9-Jul-2006
[1327x3]
the block is stored in 'attr.

parse attr [

  (txt: 123 print txt) 'image any [set txt string! (print txt) | set 
  img word! | set action block!] (print txt) | 'face
]

gives:

123
search
none
== true
argh... forgot to show you attr
attr: [image test-image "Search" [print "test"]]
Oldes
9-Jul-2006
[1330]
Don't you want to use rather:

parse/all attr [(txt: 123 print txt) 'image opt [set txt string! 
(print txt)] opt [ set img word!] opt [ set action block! (print 
txt)] (print txt) | 'face]
Henrik
9-Jul-2006
[1331]
it seems the variable is stored in the last iteration, so it's definitely 
lost after one loop.
Anton
9-Jul-2006
[1332]
Doesn't Henrik want to be able to process the attributes in any order 
?
Henrik
9-Jul-2006
[1333x3]
that's what I want. I'm catching fish :-) or rather information to 
store them safely for processing later.
but let me try Oldes thing to see what it does
it works the exact opposite :-) Only the outer 'txt is set, and I 
can't reach the variable inside the block
Anton
9-Jul-2006
[1336x2]
Henrik, I parse your test attr block successfully:

>> parse [image test-image "Search" [print "action"]] ['image any 
[set txt string! (?? txt) | set img word! | set action block!]]
txt: "Search"
== true
Need more test data to parse.
Henrik
9-Jul-2006
[1338]
anton: yes, but what is txt after processing?