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

World: r3wp

[Parse] Discussion of PARSE dialect

BrianW
22-Aug-2005
[383]
yay, got it working. It's ugly, but I got it working.
Josh
15-Sep-2005
[384x3]
I'm not seeing a good solution to this at the moment, so I thought 
I would ask for help.  I'm working with parse and I want to create 
a new set of grammar rules dynamically based on the inputed grammar. 
 The simplest example I can present is starting with the following 
rule

	b: [19]

and in the end I want to have this.
        w: {}
	newb: [(append w "the b value is 19") 19 (append w newline)]


While I can insert an APPEND that doesn't contain values from the 
original rules into the block very easily, 

insert tail newb [(append w newline)]


I'm not sure of a way to insert a parenthesized APPEND with a string 
that contains info about the block.  I hope this is clear (or even 
possible), but please ask me questions if it is not.
I suppose the question I'm asking is there a way to force the arguments 
of an expression to evaluate without actually evaluating the expression. 
 Taking the aboe example

a: join "the b value is " first b

insert head newb [(append w a)]

where I want to evaluate 'a while ending up with the expression:

insert head newb [(append w "the b value is 19")]


This seems contrary to the nature of first order functions, but I 
just wanted to check.
Excuse me, first - class functions
Ladislav
15-Sep-2005
[387]
interesting questions, unfortunately not having time to answer any
Romano
15-Sep-2005
[388x2]
a: 19 append/only [] to-paren reduce ['append  'w join "the b value 
is " a]
or

a: 19 append/only [] to-paren compose [append w (join "the b value 
is " a)]
Ingo
15-Sep-2005
[390x3]
You _just_ beat me to it ...
;-)
Forgot to use /only on first try
Josh
15-Sep-2005
[393]
Thank you Romano and Ingo
Graham
21-Sep-2005
[394]
How do you parse for a particular integer value ?

parse [ -1 ] [ integer! ]

but I want

parse [ 1] to fail ...
Geomol
21-Sep-2005
[395x2]
you can do it as a string:
>> parse form [-1] ["-1"]
== true
>> parse form [1] ["-1"]
== false
but as a block... hmmm
Gabriele
21-Sep-2005
[397]
>> parse [-1] [1 1 -1]
== true
>> parse [1] [1 1 -1]
== false
Geomol
21-Sep-2005
[398x2]
lol
How did you do that? Why does it work? :-)
ah of course. Number of instances (1 1 means exactly 1, right?).
Graham
21-Sep-2005
[400]
tricky :)
Geomol
21-Sep-2005
[401x3]
>> parse [1 1 1 1] [1 4 1]
== true
>> parse [1 1 1 1] [1 3 1]
== false
Putting numbers in the rule block indicates number of something. 
So [1 4 1] means 1 to 4 times 1.
Easier to see this way:
>> parse [a a a a] [1 4 'a]
== true
>> parse [a a a a] [1 3 'a]
== false
JaimeVargas
21-Sep-2005
[404]
Shouldn't?
parse [1][1] ;== true
Geomol
21-Sep-2005
[405x2]
So if you wanna check for exactly one time -1, you write [1 1 -1].
Jaime, when you put a number in, it's the start of a min/max indicator. 
You never type max or what to search for, so it fails.
Graham
21-Sep-2005
[407]
well, apparently numbers are not literals when parsing ...
Geomol
21-Sep-2005
[408]
Same as
>> parse [1] []
== false
Graham
21-Sep-2005
[409]
must add this to the wikibook :)
Geomol
21-Sep-2005
[410x2]
>> parse [-1 -1] [2 -1]
== false
>> parse [-1 -1] [2 2 -1]
== true
The first doesn't give meaning to parse, because a number means a 
min, so parse look for a max, and then the data.
JaimeVargas
21-Sep-2005
[412x3]
A bit consusing. Maybe we should express ranges differently.
Maybe with an issue.
#1-4
Geomol
21-Sep-2005
[415x2]
Then that needs to be parsed too.
>> i: #1-4
== #1-4
>> i/1
== #"1"
>> i/2
== #"-"
>> i/3
== #"4"
But I could have written:
#001-00004

>> parse [1 1 1] [001 00004 1]
== true
I think, Carl likes to keep it short. :-)
JaimeVargas
21-Sep-2005
[417]
What about a pair for ranges.
Geomol
21-Sep-2005
[418]
Yes, that is better.
JaimeVargas
21-Sep-2005
[419]
literals can help sometimes. But then the problem becomes that pair 
literal could have the same problem than number literal has now.
Geomol
21-Sep-2005
[420]
But then this will give problem:
>> parse [1x2] [1x2]
== true
JaimeVargas
21-Sep-2005
[421x3]
Yep.
But parse [1][1] ;== false (seems odd).
Maybe rebol needs a literal representation for ranges.
Geomol
21-Sep-2005
[424]
yes, but if you changed min/max to a pair, then
parse [1x2][1x2]
wourld fail.
JaimeVargas
21-Sep-2005
[425x3]
I understand. I just suggesting that the parse dialect could be further 
optimized.
Or enhanced.
But I guess adding extra syntax still get us in trouble.
Graham
21-Sep-2005
[428x2]
I guess block parsing is by datatypes and not Rebol values.
except for words .. hmm... confusing.
BrianH
22-Sep-2005
[430]
But numbers are literals when parsing. It's just that they're syntax 
too, at least in parse rules.
Ladislav
22-Sep-2005
[431x2]
hi all, this is an "old" issue Graham: it is in REP for quite a long 
time
(together with my suggestion how to solve it)