Лексер и токен ^
От: VjcheslavV  
Дата: 25.08.22 12:26
Оценка:
В синтаксисе лексеров есть токен ^ начало строки...
А как он строится в детерминированном конечном автомате?
В недетерминированном, я полагаю, можно обойтись подсчётом символов в строке
Неужели у таблиц лексера два входа один после конца строки другой после оканчания лексемы среди строки?
Re: Лексер и токен ^
От: VjcheslavV  
Дата: 26.08.22 05:00
Оценка:
Здравствуйте, VjcheslavV, Вы писали:

VV>В синтаксисе лексеров есть токен ^ начало строки...

VV>А как он строится в детерминированном конечном автомате?
VV>В недетерминированном, я полагаю, можно обойтись подсчётом символов в строке
VV>Неужели у таблиц лексера два входа один после конца строки другой после оканчания лексемы среди строки?

Неужели этот вопрос такой сложный? ... Или я непонятно написал?
Отредактировано 26.08.2022 5:01 VjcheslavV . Предыдущая версия .
Re: Лексер и токен ^
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.08.22 08:11
Оценка: 3 (1)
Здравствуйте, VjcheslavV, Вы писали:

VV>В синтаксисе лексеров есть токен ^ начало строки...

VV>А как он строится в детерминированном конечном автомате?

А что мешает привязаться к символу '\n'?
Re[2]: Лексер и токен ^
От: VjcheslavV  
Дата: 26.08.22 09:53
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А что мешает привязаться к символу '\n'?

Да то и мешает что он ^ может быть первым — то есть символ '\n' нужно брать с другого токена
(я про лексера а не про просто регулярные выражения)
Re[3]: Лексер и токен ^
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.08.22 10:44
Оценка: 3 (1)
Здравствуйте, VjcheslavV, Вы писали:

Pzz>>А что мешает привязаться к символу '\n'?

VV>Да то и мешает что он ^ может быть первым — то есть символ '\n' нужно брать с другого токена
VV>(я про лексера а не про просто регулярные выражения)

Ну вставь в поток псевдосимвол начала строки.

Вообще, прежде, чем задавать такой вопрос, невредно ответить на два других:
1. Что есть начало и конец строки, в виде строгого определения, а не интуитивного ощущения?
2. Как должны обычные выражения реагировать на начало/конец строки среди всего прочего потока входных байтов?
Re[4]: Лексер и токен ^
От: VjcheslavV  
Дата: 26.08.22 12:35
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ну вставь в поток псевдосимвол начала строки.

Ну это совсем наверное плохой способ:
во первых символ зарезервировать (или жертвовать каким-то входным символом или увеличивать разрядность входных данных)
во вторых нумерация входных символов изменится...

Pzz>Вообще, прежде, чем задавать такой вопрос, невредно ответить на два других:

Pzz>1. Что есть начало и конец строки, в виде строгого определения, а не интуитивного ощущения?
конец \n или \0, а вот начало либо начало входного потока либо после \n
Pzz>2. Как должны обычные выражения реагировать на начало/конец строки среди всего прочего потока входных байтов?
дак вот и никак должны не реагировать если ^ нету, а \n отдельным токеном точно будет...
... и к чему эти вопросы?
Re[5]: Лексер и токен ^
От: AleksandrN Россия  
Дата: 26.08.22 23:03
Оценка: 88 (2) +1
Здравствуйте, VjcheslavV, Вы писали:

Pzz>>2. Как должны обычные выражения реагировать на начало/конец строки среди всего прочего потока входных байтов?

VV>дак вот и никак должны не реагировать если ^ нету, а \n отдельным токеном точно будет...
VV>... и к чему эти вопросы?

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

Набросал пример:
Пусть есть алфавит с символами a, b, c, \n и пробелом и правила:
A : aab
B : ^abc

Это можно разобрать таким автоматом:
     a   b   c   ' '   \n
---+---------------------------
0  | 3            1     0
1  | 2            1     0
2  | 4
3  | 4   5
4  |     6
5  |         7
6* |              1     0
7* |              1     0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.