Эмм. Для начала все-таки стоит понять, что такое лексический анализ. Лексический анализ -- разбиение на токены(например a = 1 должно преобразоваться в нечто подобное:
ID: a
OP: =
NUM: 1
). Так в чем же проблема? Это всего лишь разбиение на токены, у токена нет четкого определения. Все остальное -- детали реалезации. Нечего не мешает мне число -1 посчитать за токен типа num, ведь -1 это же число, верно? И ничего "не логичного" в этом нет. Я также могу -1 посчитать за 2 токена:
OP: -
NUM: 1
Везде происходит разбиение на токены из чего мы делаем вывод: то, что делает пух -- лексический анализ. Так же, хочу заметить, что в случае где -1 разбивается на два токена могут возникнуть проблемы в парсинге токенов в абстрактное синтаксическое древо. Причем парсер нормальный, не такой как у тебя в том же KanLang-е(он у тебя неверен так как в сформированном АСТ уже должны быть учтен тот же порядок действий ( у тебя же совсем другое, определение порядка действий происходит во время прохождения по древу
Хотя говорить, что это неверно -- некорректно. Просто если ты уж делаешь так, как делаешь будь добр, называй это не парсер в аст, а парсер в нечто свое)). Что я имею ввиду под нормальным? Очень упрощённо говоря, если мы парсим выражение 2 + 2, то в дереве корневым узлом должен быть оператор +, а его листьями 2 и 2. А что же делать с, например, отрицательными числами? Нам придется добавлять доп. проверку является ли оператор угарным или же нет. Но почему этим должен заниматься парсер? Вот это действительно не логично. Вывод: ты просто доебался, либо споришь не погружаясь в тему
тебе надо книгу писать