Help with Function String syntax for REXX

Syntax highlighting, code folding, brace matching, code indenting, and function list

Help with Function String syntax for REXX

Postby Pete Moss » Thu Mar 25, 2010 12:12 am

I just discovered the Function List feature. I would like to use it to create a list of the functions in my Rexx programs, but I can't figure out the /Function String syntax.

First, does UE scan the code and find the function names or do I need to put a comment string by each function to identify it? I'd like to learn how to do it both ways.

A Rexx function name is just a label, which is a valid name followed by a colon. There can be some keywords after the colon.

Function1:
Function2: Procedure

Rexx comments start with "/*", end with "*/", and can span multiple lines. /* This is a comment */

Can someone give me a correct /Function String statement and what to put in the code?

I just want a list of the functions. I don't care too much about the calls.

There are several Rexx wordfiles on the website. Some of them have /Function String statements. One of them is:

/Function String = "%[a-zA-Z]*)"

I tried putting that one in my wordfile and pushing F8. It caused some (but not all) of the calls to subroutines to show up in the Function List, but none of the actual functions.

Thanks

PS: I am running UE 14.20.1.1008 on WinXP.
Pete Moss
Basic User
Basic User
 
Posts: 11
Joined: Wed Mar 24, 2010 11:39 pm

Re: Help with Function String syntax for REXX

Postby Mofi » Thu Mar 25, 2010 1:34 am

Write into your wordfile for Rexx

/Function String = "%[ ^t]++^([0-9a-z_]+^):"

What does this UltraEdit regular expression mean?
Well, you could answer that by yourself using the table at top of help page Regular Expressions (Legacy) which explains the special characters for the UltraEdit regexp engine, or you use the regular expression builder help (button with triangle arrow) in the Find/Replace dialog when UltraEdit regular expression option is enabled and you use UE v16.00. However, I explain it here:

% means start of line. So the string to find must begin at start of a line.

[ ^t]++ means find a space or tab zero or more times. In other words ignore spaces/tabs between start of line and function name. If preceding white-space characters are not allowed in Rexx because a function/procedure must start at column 1, remove this part of the expression from the function string you want to use.

^(...^) tags the string found by the expression inside ^( and ^). This is normally used in a replace to reference a part of the found string for being re-used also in the replace string. For the function string list it is used to tell UltraEdit which part of the found string should be displayed in the function list view.

[0-9a-z_]+ means find one or more characters which is either a digit or a letter or an underscore. In your case this is the function name. If other characters are also allowed, put them into the square brackets. But be aware that the characters [ - ] and ^ must be escaped with a preceding ^ inside the square bracket to be interpreted as character without special regular expression meaning. Many languages require that the first character of a symbol name (function name) can be only a letter or an underscore. If that is true also for Rexx, [a-z_][0-9a-z_]++ would be better because now the first character of the function name string can be only a letter or an underscore.

: has no special regular expression meaning. It just defines that after the function name a colon must follow to identify the found string as function string.
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4039
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna

Re: Help with Function String syntax for REXX

Postby Pete Moss » Thu Mar 25, 2010 3:39 am

Thanks, Mofi. That got me started.

/Function String = "%[ ^t]++^([0-9a-z_]+^):"

is mostly working. The main problem involves multi-line comments. Most of my functions have a prolog that is a single comment block and most of them contain a syntax line:

Code: Select all
/*===================================

Describe function...

   Syntax: MyFun(p1, p2, p3, ...)

Other prolog information...
===================================*/

Is there a way to get the Function String search to ignore comments? I have block comments indicated in the first line of the worfile:

/L1"Rexx, Quercus" REXX_LANG Nocase NestBlockComments Block Comment On = /* Block Comment Off = */ File Extensions = REX REXX
/Delimiters = '".,;:( )»+-/*|=\^&%<>

» is used here as a placeholder for a tab character because tabs are displayed in HTML as a single space.

I am running v14. I can upgrade to v16 if that will help.
Pete Moss
Basic User
Basic User
 
Posts: 11
Joined: Wed Mar 24, 2010 11:39 pm

Re: Help with Function String syntax for REXX

Postby Mofi » Sat Mar 27, 2010 12:38 pm

UltraEdit (also v16.00) does not ignore comments when searching for function strings. Most simple would be to avoid Syntax: in comments. Running a replace in files on all *.rex* files could be used to change all Syntax: to !Syntax: or just Syntax to avoid being interpreted as function string.

Another method is to use instead of the UltraEdit regular expression engine the more powerful Perl regular expression engine. Instead of line

/Function String = "%[ ^t]++^([0-9a-z_]+^):"

using

/Regexp Type = Perl
/Function String = "^[ \t]*([0-9a-z_]+)(?<!Syntax):"


solves the problem with Syntax: because this Perl regular expression similar to the UltraEdit regexp looks back on the found function name string and ignores it when this string is Syntax in any case. (?<!Syntax) is responsible for this additional check on the string found by the preceding expression.

Hint: Remove REXX_LANG from the first line of your wordfile. All possible language marker strings are listed on the help page with title Syntax Highlighting. Obviously invented REXX_LANG is not listed there, therefore not recognized by UltraEdit and so completely useless.
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4039
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna


Return to Syntax Highlighting