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

World: r3wp

[Dialects] Questions about how to create dialects

Geomol
13-Jan-2005
[43]
:-D
Robert
13-Jan-2005
[44]
My goal is to create the dialect in a way that it's easy to use for 
non-techies. Yes, it's hard but hey, otherwise it would be no challange.
Ladislav
13-Jan-2005
[45x2]
Robert: you don't need to have any knowledge of PARSE to design a 
dialect. The only thing you need is to know how the dialect should 
look and work.
e.g. I am not implementing all my dialects using PARSE
DideC
13-Jan-2005
[47x6]
Robert: Why not settings the words to none! just when you clear the 
block :
strings: copy [] integers: copy []

rule: ['keyword (clear strings clear integers   size: maxlength: 
caption: default: none  ) some [set p integer! (append integers p) 
| set p string! (append strings p)] (size: integers/1 maxlength integers/2 
caption: strings/1 default: strings/2)]
then, none! is default unless you specify Size and, maybe, Maxlength.
Ups, it's even not needed : if Integers is empty, then "size: empty/1 
--> none!"
So, mix the both : the 'maxlength and 'default keywords :
rule: [
	'keyword (clear strings clear integers)

 any [set p integer! (append integers p) | set p string! (append strings 
 p)]

 (size: integers/1 maxlength: integers/2 caption: strings/1 default: 
 strings/2)

 any ['maxlength set p integer! (maxlength: p) | 'default set p string! 
 (default: p)]
]

tests: [
	[]
	[keyword]
	[keyword 10 20 "Blue" "Orange"]
	[keyword 10 "Blue"]
	[keyword 10 20]
	[keyword "Blue" "Orange"]
	[keyword 10 "Blue" 20 "Orange"]
	[keyword "Blue" 10 20 "Orange"]
	[keyword "Blue" "Orange" 10 20]
	[keyword "Blue" maxlength 20]
	[keyword 10 default "Orange"]
	[keyword maxlength 20]
	[keyword default "Orange"]
	[keyword maxlength 20 default "Orange"]
	[keyword default "Orange" maxlength 20]
]

strings: copy [] integers: copy []
size: maxlength: caption: default: -1

foreach t tests [
	parse t rule
	print [mold t "==>" size maxlength caption default]
]
Robert
14-Jan-2005
[53x2]
Dide, yes I have found the side effect of empty/1 == none! as well.
About mixing: I'm thinking of something like this:

(keyword: none)
any [

 opt ['maxlength (keyword: 'maxlength) | 'default (keyword: 'default)]]
	any [set p integer! (repend integers [keyword p])
	...

I think you get the idea.
Graham
14-Jan-2005
[55]
I had this problem a couple of weeks ago when trying to write a function 
to repopulate a web page from the posted cgi object.
Robert
14-Jan-2005
[56]
As said, my goal is to reduce the number of keywords as much as possible 
and make it easy to use.
Graham
14-Jan-2005
[57]
Are you trying to parse html to see if it is valid or not?
Robert
14-Jan-2005
[58]
No, I'm doing a dialect to create HTML forms with CGI etc.
Sunanda
14-Jan-2005
[59]
I suspect a mixed positonal + keyword approach may be the best.
Positional for for common attrbutes.
Keyword for the more esoteric ones.
Maybe read up on CSS shorthand methods for inspiration.
Robert
15-Jan-2005
[60]
Yes, right that's what I'm going to do. Thanks for the CSS tipp, 
I take a look at.
Geomol
25-Jan-2005
[61x2]
I've defined a new format, which is a REBOL version of XML. I already 
have scripts, that can convert between this format and XML. So far, 
I've called the functions "xml2rebol" and "rebol2xml", but maybe 
"rebol" isn't a good name for the new format. I've thought about 
"rebxml" as a name. Any ideas or suggestions? This is a quick explanation 
of the foremat:

tag (optional attributes) string or block

If the string is empty, it's an empty element tag. In XML: <tag/>

If attributes are present, they are one or more pairs of a word and 
a string.
A block can hold strings and new tags.

This XML example:

<person alive="yes"><name>Mr. Smith</name><male/><address><street>Sunnylane</street><number>44</number></address><person>
will look like this in the new format:

[ person alive "yes" [ name "Mr. Smith" male "" address [ street 
"Sunnylane" number "44" ] ]

Other examples:
<tag></tag> = tag [ "" ]
<tag>content</tag> = tag "content"
or tag [ "content" ]
Both are valid.
Correction!
This XML example:

<person alive="yes"><name>Mr. Smith</name><male/><address><street>Sunnylane</street><number>44</number></address></person>
Terry
25-Jan-2005
[63x2]
I like this.. 
°Mr. Smith° (main °7°) has the following..
 
	°Class?° °Person°
	°Alive Dead Status° "Alive"
	°Address 1° "44"
	°Address 2° °Sunnylane°
Notice that °Sunnylane° and °Person° are themselves °7°s?  This means 
that more information is available regarding them.. ie:

°Sunnylane: last time paved?° 
or 
°Sunnylane: set last time paved -=24-Oct-2001=-°


Because °Mr. Smith° is a °Person°, we could make a query like.. °Mr. 
Smith: requires food to survive?°  and have the system respond "Yes."
Geomol
25-Jan-2005
[65]
:)
Andrew
25-Jan-2005
[66x4]
Geomol, you might want to look at my ML dialect which has something 
very similar to what you're doing. ML is my Rebol dialect for writing 
XML.
In ML
In ML
/tag   ->     <tag/>
tag []    ->   <tag> (stuff in block) </tag>

tag/attribute value []    ->   <tag attribute="value"> (stuff in 
block) </tag>

<tag attribute="value"> []   ->   <tag attribute="value"> (stuff 
in block) </tag>
And it's all in one function.
Ladislav
2-Nov-2005
[70x5]
An "Internal dialecting" discussion. Currently REDUCE has got a REDUCE/ONLY 
option to specify, which words are *not* evaluated
I, OTOH, found an "opposite" approach specifying which words *are* 
evaluated very fruitful.
Examples are my BUILD dialect:
build/with [let's see what] build/with [what: [the rise of the (y)]] 
[
        y: 'sun
    ] ; == [let's see the rise of the (sun)]
or my SUBSTITUTE dialect:
JaimeVargas
2-Nov-2005
[75]
Do you have an example where reduce/only works. I only get errors.
Ladislav
2-Nov-2005
[76x2]
tests: substitute [
		generate-test [
			set variable value
			eq variable 1
		] [value] [1 2]
		return "OK"
		label fail
		do discard [print ["test:" mold testing "failed"] halt]
	] [generate-test]
Reduce/only example:
Volker
2-Nov-2005
[78]
example:
!> reduce/only[green blue][green]
== [green 0.0.255]
Ladislav
2-Nov-2005
[79]
>> reduce/only [a b c d] [b c d]
== [1 b c d]
Volker
2-Nov-2005
[80]
Maybe we need both reduce? AFAIK currently it is to have a reduce 
which allows keywords.
JaimeVargas
2-Nov-2005
[81]
Ah. Interesting. I think I needed this in the past I didn't know 
it existed.
Volker
2-Nov-2005
[82]
Good idea IMHO. Sadly i managed to crash it in my first try.
JaimeVargas
2-Nov-2005
[83]
I wish build was part of rebol. I find it a lot easier to use than 
compose. Only that slower.
Sunanda
21-Mar-2006
[84]
Bill Gates says "We need dialects"
http://microformats.org

(Actually he said "microformats" -- but I can't see any real difference 
in intent)
DideC
22-Mar-2006
[85]
Hum, not sure it's dialect equivalent. It looks like some "XML samples" 
to replace existing text format (ie iCal => hCalendar)
Maxim
22-Mar-2006
[86]
IMO nothing to do with dialect... AFAICT they are simply structured 
xml definitions...
Allen
22-Mar-2006
[87]
vCard --> iCard --> hCard  ... plenty of alphabet to go for future 
formats ;-)
Maxim
22-Mar-2006
[88]
just keep "R"  for us... we should patent the letter "R"   ;-)
Allen
22-Mar-2006
[89]
Well nothing stopping us from doing the same thing. Just do a like 
for like conversion as they did, but do it into rebol format instead 
of xml or xhtml
Gregg
24-Mar-2006
[90]
Visual Studio is getting DSL support, along the lines of what JetBrains 
has done I think. There's a team blogging about it inside MS, so 
I think Bill and Co. *do* think we need them (they're just doing 
it wrong ;-).
Thør
2-Apr-2006
[91]
initial sync...
Thør
26-May-2006
[92]
.