В синтаксисе лексеров есть токен ^ начало строки...
А как он строится в детерминированном конечном автомате?
В недетерминированном, я полагаю, можно обойтись подсчётом символов в строке
Неужели у таблиц лексера два входа один после конца строки другой после оканчания лексемы среди строки?
Здравствуйте, VjcheslavV, Вы писали:
VV>В синтаксисе лексеров есть токен ^ начало строки... VV>А как он строится в детерминированном конечном автомате? VV>В недетерминированном, я полагаю, можно обойтись подсчётом символов в строке VV>Неужели у таблиц лексера два входа один после конца строки другой после оканчания лексемы среди строки?
Неужели этот вопрос такой сложный? ... Или я непонятно написал?
Здравствуйте, VjcheslavV, Вы писали:
VV>В синтаксисе лексеров есть токен ^ начало строки... VV>А как он строится в детерминированном конечном автомате?
Здравствуйте, Pzz, Вы писали:
Pzz>А что мешает привязаться к символу '\n'?
Да то и мешает что он ^ может быть первым — то есть символ '\n' нужно брать с другого токена
(я про лексера а не про просто регулярные выражения)
Здравствуйте, VjcheslavV, Вы писали:
Pzz>>А что мешает привязаться к символу '\n'? VV>Да то и мешает что он ^ может быть первым — то есть символ '\n' нужно брать с другого токена VV>(я про лексера а не про просто регулярные выражения)
Ну вставь в поток псевдосимвол начала строки.
Вообще, прежде, чем задавать такой вопрос, невредно ответить на два других:
1. Что есть начало и конец строки, в виде строгого определения, а не интуитивного ощущения?
2. Как должны обычные выражения реагировать на начало/конец строки среди всего прочего потока входных байтов?
Здравствуйте, Pzz, Вы писали:
Pzz>Ну вставь в поток псевдосимвол начала строки.
Ну это совсем наверное плохой способ:
во первых символ зарезервировать (или жертвовать каким-то входным символом или увеличивать разрядность входных данных)
во вторых нумерация входных символов изменится...
Pzz>Вообще, прежде, чем задавать такой вопрос, невредно ответить на два других: Pzz>1. Что есть начало и конец строки, в виде строгого определения, а не интуитивного ощущения?
конец \n или \0, а вот начало либо начало входного потока либо после \n Pzz>2. Как должны обычные выражения реагировать на начало/конец строки среди всего прочего потока входных байтов?
дак вот и никак должны не реагировать если ^ нету, а \n отдельным токеном точно будет...
... и к чему эти вопросы?
Здравствуйте, VjcheslavV, Вы писали:
Pzz>>2. Как должны обычные выражения реагировать на начало/конец строки среди всего прочего потока входных байтов? VV>дак вот и никак должны не реагировать если ^ нету, а \n отдельным токеном точно будет... VV>... и к чему эти вопросы?
Думаю, можно это сделать двумя отдельными состояниями, в одном из которых будут переходы для того, что должно начинаться в начале строки. И переход в одно состояние должен быть по переводу строки, в другое — по любому другому пробельному символу.
Набросал пример:
Пусть есть алфавит с символами a, b, c, \n и пробелом и правила:
A : aab
B : ^abc