WedX - журнал о программировании и компьютерных науках

Выражение Flex требуется для проверки определенного выражения только на основе первых трех символов.

Для моего синтаксического анализатора, для целей этого вопроса, любая строка, начинающаяся с одной строчной буквы из набора строчных букв, за которой следует символ «=», за которым следует любой другой символ, является допустимой строкой. Итак, допустимы следующие строки (все начиная с первого столбца):

    a=20
    b=50 70
    q=20 Hello There
    z=-

Любая другая строка недействительна. Мне нужно, чтобы соответствовать дополнению. Как написать гибкое выражение для соответствия недопустимым строкам. Мое замешательство возникает из-за ^, что означает начало строки, а также дополнение выражения. Я думал, что ^[abq][=].+ будет соответствовать допустимой строке, так что достаточно будет просто дополнить ее ^. Но ^ в начале выражения всегда подразумевает совпадение в начале строки. Я сделал несколько других попыток, но это тоже не сработало. Хотя это и не имеет значения, это выражение используется в качестве первого шага для отбрасывания недопустимых строк SDP. См. здесь подробности из соответствующего RFC SDP, если это имеет значение.

31.12.2019

  • Вы не знаете. Вы пишете гибкие выражения для сопоставления токенов и позволяете синтаксическому анализатору беспокоиться о том, что является допустимым, а что недействительным. 01.01.2020
  • @ user207421 Ваше утверждение не всегда применимо, хотя это обычная практика. В некоторых случаях, особенно ошибочных, лучше отсеять целые строки или наборы токенов в лексере, чтобы разгрузить парсер. Тем не менее, я не специалист в этой области. 01.01.2020

Ответы:


1

Самый простой подход — всегда сопоставлять целые строки (или использовать разные начальные условия для лексического анализа остальных допустимых строк). Хотя flex не имеет оператора отрицания (класс отрицательных символов [^…] не является оператором), в этом случае выражения довольно просты и могут быть выражены достаточно легко. Обратите внимание, что не имеет значения, что различные шаблоны «недопустимой строки» не являются непересекающимися, поскольку не имеет значения, какой из них соответствует конкретной недопустимой строке. Итак, вот три шаблона, которые, как я считаю, в совокупности соответствуют всем недопустимым строкам.

[^abqz\n].*   { /* Starts with the wrong letter */ }
.[^=\n]       { /* Second character not = */ }
.$            { /* Only one character in line */ }
31.12.2019
  • Я думаю, что первые два правила должны начинаться с ^, чтобы соответствовать началу строки. Пожалуйста, прокомментируйте. В любом случае, вы наставили меня на правильный путь. Я пытался отрицать выражение, используя ^. 01.01.2020
  • Если вы всегда сопоставляете полную строку, каждое совпадение начинается с начала строки, и вам не нужно явно запрашивать это. 01.01.2020
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]