I have a script which works under Core 2.2 but fails under 2.3:

The problem appears to be in the way I use parse, but I can�t see what is
wrong, particularly since it worked under 2.2

Thanks,

Garold (Gary) L. Johnson
DYNAMIC Alternatives <http://www.dynalt.com/>
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
562 802 1639



REBOL 2.2.0.3.1
[snip]
Script: "Test args processing" (13-Jun-2000)
Argument processing test -- glj_args.r
Parsing arguments
Arguments:  arg1=1 arg2={A string} arg3
1 : { arg1=1 }
2 : { arg2={A string} }
3 : { arg3 }
Found  3  arguments

Argument list
arg1=1
arg2={A string}
arg3
>>


REBOL/Core 2.3.0.3.1
[snip]
Script: "Test args processing" (13-Jun-2000)
Argument processing test -- glj_args.r
Parsing arguments
Arguments:   arg1=1 arg2={A string} arg3
Found  0  arguments

Argument list
>>

The script:

REBOL [
   Title:   "Test args processing"
   Date:    2000-Jun-13
   Name:    'glj_args
   Version: 0.1.0
   File:    %glj_args.r
   Home:    http://www.dynalt.com
   Author:  "Garold L. Johnson"
   Email:   [EMAIL PROTECTED]
   Owner:   "DYNAMIC Alternatives"
   Rights:  "Copyright 2000 by DYNAMIC Alternatives"
   Tabs:    4
   Need:    0.1.4
   Language: 'English
   Charset: 'ANSI
   Purpose: {
      Determine what REBOL does with command line arguments.
   }

   Example: {
        REBOL glj_args.r [<arg list to test>]

        arg-parser/parse-args
        or
        arg-parser/parse-args/verbose ; trace parse

        print [ newline "Argument list" ]
        foreach arg arg-parser/arg_list [
            print arg
        ]
   }
   Category: [test 1]
]

print "Argument processing test -- glj_args.r"
if none? system/script/args [
    print "No arguments provided."
    halt;
]

arg-parser: make object! [
    print "Parsing arguments"
    dbg: 1
    arg_cnt: 0
    arg_list: make block! 50
    text: make string! 100

    ; Character classes
    digit: charset [#"0" - #"9"]
    alpha: charset [#"A" - #"Z" #"a" - #"z"]
    alphanum: union alpha digit

    ; Parsing rules
    ; Name starts with letter; allows letters, digits, and '-' or '_'
    name: [ alpha any [alphanum | #"-" | #"_"] ]

    ; Strings are enclosed in braces
    str: [ #"{" thru #"}" ]

    ; Arg -- name | name=value
    ; value = string or sequence without spaces
    arg: [
        copy text [
            name [ 0 1 [ #"=" [ str | to #" " ] ] ]
        ]
        (arg_cnt: (arg_cnt + 1)
            ( if dbg [print [ arg_cnt ": {" text "}" ]] )
            append arg_list text
        )
        some #" "
    ]

    parse-args: func [
        "Parse command line arguments into arg-list"
        /verbose "print arguments as parsed"
        ] [
        dbg: either verbose [ 0 ][ 1 ]
        parse/all system/script/args [ some arg ]
        print [ "Found " arg_cnt " arguments" ]
    ]   ; parse-args
]   ; arg-parser

print [ "Arguments: " system/script/args ]

arg-parser/parse-args/verbose

print [ newline "Argument list" ]
foreach arg arg-parser/arg_list [
    print arg
]

halt;

; End of File glj_args.r

Reply via email to