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