Будет ли лексический анализатор распознавать два токена без пробелов между ними? - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу симулировать лексический анализатор с помощью Flex.

Часть программы распознает имена фигур, состоящие из пяти символов, [ABCDE] во всех комбинациях, но только если количество букв равно одной, трем или четырем.В этом случае он напечатает ввод и слово «shape».

Например, если ввод «A», «BCD», «CDBE», он напечатает «A: shape».Мой вопрос заключается в том, что при некотором вводе, таком как 'AB', с двумя слипшимися символами , что не является допустимым числом букв, если брать его целиком , что будет делать настоящий лексический анализатор?Признать «A» как форму, а затем «B» как форму, или считать это ошибкой?

1 Ответ

0 голосов
/ 02 апреля 2019

Зависит от того, как написаны правила.Если существует простое правило «[ABCDE]» для всех допустимых одиночных букв, «AB» будет распознаваться как два действительных токена «A» и «B».Я предполагаю, что это не правильно, верно?

Я не эксперт лексера и парсера.Вот лишь грубая идея.

^[ABCDE]{4}$ { /* do sth. */ return TOKEN4; }
^[ABCDE]{3}$ { /* do sth. */ return TOKEN3; }
^[ABCDE]{1}$ { /* do sth. */ return TOKEN1;}
^.*$         { /* report error or throw the input. */ ; }
...