Rexx - Разбор
Одна из самых мощных функций Rexx - это его способность анализировать текстовые значения. Вы, вероятно, не увидите этого ни на каких других языках программирования.
Общий формат оператора синтаксического анализа следующий:
Синтаксис
PARSE {UPPER|LOWER|CASELESS} source {template}
Where,
UPPER - Перед синтаксическим анализом исходный текст переводится в верхний регистр.
LOWER - Перед синтаксическим анализом исходный текст переводится в нижний регистр.
CASELESS - Когда этот параметр передан, корпус игнорируется.
source- Это источник, который нужно проанализировать. Для этого доступно множество вариантов, и они могут быть одним из следующих:
ARG - Аргументы программы или процедуры могут использоваться в качестве источника.
LINEIN - В качестве источника можно использовать вход следующей строки.
SOURCE - Исходная информация программы может использоваться как источник.
VAR name - Значение имени переменной может использоваться в качестве источника.
template- Этот параметр указывает, как анализировать источник. Для этого доступно множество вариантов. Некоторые из них упомянуты ниже.
variable name - Это значение, присвоенное переменной.
literal string - Буквальная строка, которая может использоваться в качестве шаблона для разделения нанизанных.
#- Абсолютное положение символа в самом источнике. Таким образом, если вы укажете значение 5, будет использоваться 5- й символ.
+#- Относительное положение символа в самом источнике. Таким образом, если вы укажете значение 5, будет использоваться 5- й символ.
Давайте посмотрим на простой пример того, как можно выполнить синтаксический анализ в Rexx.
пример
/* Main program */
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
Вышеупомянутая программа анализирует слова во фразе. Когда значение состоит из слов, разделенных только одним пробелом, и нет начальных или конечных пробелов, значение легко разбить на известное количество слов следующим образом.
Функция синтаксического анализа используется в Rexx, чтобы взять строковое значение и затем разбить его на слова. В приведенном выше примере слова затем разделяются, а затем сохраняются в переменных слов.
Результат вышеупомянутой программы будет следующим:
'This'
'is'
'a'
'Tutorial'
Другой пример синтаксического анализа показан в следующей программе. На этот раз мы используем предложение while для синтаксического анализа.
пример
/* Main program */
phrase = 'This is a Tutorial'
do while phrase <> ''
parse var phrase word phrase
say "'"word"'"
end
Вышеупомянутая программа даст следующий результат -
'This'
'is'
'a'
'Tutorial'
Позиционный анализ
Rexx также позволяет работать с позиционным парсингом. Давайте посмотрим на пример того, как мы можем добиться позиционного синтаксического анализа с помощью оператора синтаксического анализа.
пример
/* Main program */
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 11 name2 21 birthday 31 town 51 country
say name1
say name2
say birthday
say town
say country
Из приведенного выше примера вы можете заметить, что наряду с именем переменной мы также указываем, где должна заканчиваться строка. Итак, для name1 мы должны закончить 11-м символом, а затем начать синтаксический анализ name2.
Результат вышеупомянутой программы будет следующим -
Doe
John M.
03/03/78
Mumbai
India
Вы также можете использовать relative positional parsing в этом случае.
пример
/* Main program */
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 +10 name2 +10 birthday +10 town +20 country
say name1
say name2
say birthday
say town
say country
Результат выполнения вышеуказанной программы будет таким, как показано ниже.
Doe
John M.
03/03/78
Mumbai
India