You invoke a lexical string operator with a percent sign followed by the lexical operator name, a left parentheses, a list of arguments separated by commas, and a right parentheses. The following example shows the lexical operator syntax: .print "%EDIT(<Fred>,<upcase>)" Spaces are allowed between syntax elements in the general lexical operator syntax. For example, the following syntax, including spaces, is allowed: .print "%EDIT ( <Fred> , <upcase> )" Spaces are also allowed between the opening and closing percent signs in a lexical substitution operator. .print "% lexical_symbol_name %" Spaces are not allowed between the pair of percent signs indicating a lexical escape operator. You can specify lexical operator arguments in the same way as macro arguments: o A numeric symbol name preceded by a backslash (\). This construct results in the decimal value of the numeric symbol, as shown in the following example: \N o Any string of characters surrounded by left- and right-angle brackets, as shown in the following example: <Foo bar thud> You can nest angle brackets (<>). For example: <<X+7>*17> o Any string of characters surrounded by a delimiter specified after a caret character (^). You cannot nest delimiters. For example: ^%Foo bar thud% o Any undelimited string of characters not separated by a space, tab, form feed, comma, equal sign, semicolon, or end of line. For example: A+B+C In addition to the formats allowed for a macro argument, you can also specify lexical operator arguments as follows: o An undelimited string of characters may also contain a string of characters enclosed within left and right parentheses. The characters between the left and right parentheses may contain space, tab, or comma delimiters. For example: 16( R27 ) o You can use a lexical operator as an argument to another lexical operator. For example: %EXTRACT( %LOCATE($,X), %LENGTH(X) - %LOCATE($,X) ,X) Except for the %TYPE lexical operator, a string symbol name supplied as a lexical operator argument is replaced with the value of the string symbol. Each lexical operator accepts a given number of arguments and each argument has a specific type. There are three different types of arguments-string, integer, and name: o A string argument can be any arbitrary sequence of characters. o An integer argument must be an absolute or relocatable expression that can be resolved at that point in the assembly. A relocatable expression represents a psect and an offset within that psect. If you specify a relocatable expression for an integer argument, the assembler uses only the value of the offset within the psect. The offset value is determined before optimization and code alignment, but after data alignment. o The name argument type is used only by the %TYPE lexical operator. The %TYPE lexical operator accepts the name of a numeric symbol, string symbol, label, psect, or a permanent symbol as its argument. Unlike the other lexical operators, if a string symbol name is specified as an argument to %TYPE, the value of the string symbol is not substituted for its name. Instead, information about the name is returned. If you omit a string argument, the default is the empty string. An empty string is a string with no characters. If you omit an integer argument or specify an illegal expression, the default value is 0. The assembler does not issue diagnostic messages for illegal expressions used as arguments to lexical operators. If you omit the name argument or specify an illegal name to the %TYPE lexical operator, %TYPE returns a 0 value.