Проверка выражения с использованием preg_match

Добрый день! Я пытаюсь создать программу, которая принимает лямбда-выражение от пользователя, и что эта программа делает, чтобы проверить, является ли оно действительным лямбда-выражением.

пример — пользовательский ввод (λa.abc) a -> затем проверяет

Моя проблема в том, что мои знания о функциях Regex очень ограничены, я использовал preg_match, чтобы решить эту проблему, но все еще не достиг большого прогресса. любая помощь будет высоко ценится .. Спасибо 🙂

Ну, это правила действительного λ-выражения

  1. одна переменная = (одна буква)
  2. применение функции = (λ-выражение) (λ-выражение)
  3. функция абстракция = λ (переменная). (λ-выражение)

Это код, который я сделал с preg_match

if(preg_match("/\((L([a-z])*.(([a-z])*)*)\)/", $getexpression, $match)):
print "Valid!";

не очень хорошо работает

0

Решение

Я должен признаться, что я не получил слишком много от вашего определения выражений, так как вы в основном сказали, что «выражение — это переменная или набор переменных».
Я бы вообще рекомендовал избегать использования слова, которое вы пытаетесь определить в самом определении.

Тем не менее, прочитав Википедию и комментарии, я думаю, я мог бы получить то, что можно истолковать как рабочее регулярное выражение для этого:

// Basic definition: Lambda + letter == variable.
$lVar = 'λ[a-z]';

// Complex definition: Variable, possibly followed by variables,
// and closed with a letter preceeded by a dot or whitespace.
$lExp = "({$lVar}(?:\\.{$lVar})*(?:[ .][a-z]+))";

// Complete definition:
//    1. Only single  expression.
//    2. Or a parameterized expression which may contain
//       the entire pattern recursively.
$lRegEx = "/^$lExp|\\($lExp(?R)\\)\\Z/u";

При этом я не уверен на 100%, что это можно проверить с помощью регулярного выражения. По крайней мере, не полностью. Это похоже на то, что вам нужно написать / использовать токенизатор за.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]