правильный шаблон в flex, ошибка: правило не может быть найдено - PullRequest
0 голосов
/ 27 мая 2018

привет Я пытаюсь использовать следующий шаблон в flex для сопоставления информации в виде

  • ss:Name="string" (строка должна быть в "")
  • ss:Name="Number" (фактическое слово Number)
  • ss:Workshop

, когда я его компилирую, отображаются предупреждения об ошибках, которые не могут быть сопоставлены правилу.Мой код такой:

%{
#include "y.tab.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
%}
%option noyywrap
letter [a-zA-Z]
digit [0-9]
other_characters [./-_]
whitespace [ \t]
newline [\n]
string ({letter}|{digit}|{other_characters})({letter}|{digit}|{other_characters})+
%%
{string}({whitespace}|{string})     {printf ("%s", yytext); return TEXTMSG;}
"ss\:Workshop"      {printf("%s", yytext); return WORKSHOP;}
"ss\:Name\=\"Number\""|"ss\:Name\="\"{string}\"|    {printf("%s", yytext); return NAME;}

Есть какие-нибудь подсказки, почему это не так?Что-то новенькое, чтобы согнуться здесь, так что я думаю, что я что-то упустил, не уверен, что, хотя

1 Ответ

0 голосов
/ 27 мая 2018

Проблема в этом классе символов:

other_characters [./-_]

Тире в классе символов указывает диапазон возможных символов (как в [a-z], что соответствует любой строчной букве).Таким образом, /-_ соответствует любому символу, кодовая точка которого находится между / (0x2F) и _ (0x5F) включительно.Этот диапазон включает цифры, прописные буквы и некоторые знаки пунктуации, включая двоеточие и точку с запятой.

Это делает двоеточие допустимым символом в {string}, поэтому {string} будет соответствовать ss:Workshop.А поскольку flex отдает приоритет первому правилу, которое соответствует входному значению, это делает невозможным сопоставление правила ss:Workshop.

Это можно исправить, поставив дефис в начале или в концекласса персонажей: [-./_] или [./_-].Они будут соответствовать только одному из четырех перечисленных символов.

Кстати, нет необходимости ставить обратную косую черту или даже заключать ее в кавычки.Это не имеет особого значения в гибких моделях.

...