Снегопат

Обсуждение Снегопата
Текущее время: 29 мар 2024, 10:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: lexer - я чего-то недопонял?
СообщениеДобавлено: 28 окт 2013, 23:37 
простая функция -

function macrosTestLexer(){
var tw = GetTextWindow();
//debugger;
if (!tw) return;

var prgText = tw.text();
var parser = snegopat.parseSources(prgText)
for(var i = 0, c = parser.lexemCount; i < c; i++)
{
var lex = parser.lexem(i)
Message("type = "+lex.type+" text = "+lex.text+" ");
}
}

еще более простой текст на входе
x = "strin1
|strin2";

и неожиданный вывод

type = 27 text = x
type = 12 text = =
type = 2 text = "strin1
type = 2 text = |strin2"
type = 14 text = ;


вопрос - почему строка разбилась на 2?

второе
ввод такой
//@version: Версия 3 (28 октября 2013 г. 23:26:29)
х = новый Структура("Возврат","");
х.Возврат = 1;
Сообщить("х.Возврат = "+х.Возврат);

вывод
type = 1 text = //@version: Версия 3 (28 октября 2013 г. 23:26:29)
type = 27 text = х
type = 12 text = =
type = 56 text = новый
type = 27 text = Структура
type = 8 text = (
type = 2 text = "Возврат"
type = 13 text = ,
type = 2 text = ""
type = 9 text = )
type = 14 text = ;
type = 27 text = х
type = 21 text = .
type = 46 text = Возврат
type = 12 text = =
type = 4 text = 1
type = 14 text = ;
type = 27 text = Сообщить
type = 8 text = (
type = 2 text = "х.Возврат = "
type = 15 text = +
type = 27 text = х
type = 21 text = .
type = 46 text = Возврат
type = 9 text = )
type = 14 text = ;

почему имя поля имеет тип 46? должно же быть 27, ведь после точки не может идти ключевоое слово?

Это можно исправить? если да - то попутно просьба - сделай деление коментов на два - начинающийся с начала строки (любая последовательностей пробелов и табов за которыми идет //) и простой комент который после кода пишеться

И в документации можно поправиь - кроме абревеатууры написать еще и числовое значение типа

а еще небольшой, но неприятный баг. при попытке забобрать код где есть лексема
&УбитьЛексер!
просиходит падение


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: lexer - я чего-то недопонял?
СообщениеДобавлено: 28 окт 2013, 23:38 
забобрать читать как разобрать


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: lexer - я чего-то недопонял?
СообщениеДобавлено: 29 окт 2013, 09:44 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
Полуофф. использование УбитьЛексер убивает лексер, все верно :)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: lexer - я чего-то недопонял?
СообщениеДобавлено: 29 окт 2013, 15:09 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Сразу хочу сказать - лексер это не синтакический анализатор.
Его цель - разбить текст на поток лексем. Он просто не должен помнить, что было до текущей лексемы, тупо выдает все что встретит.
То, что ключевые слова после точки (а если точнее, в качестве имен методов и свойств объекта) допустимы - это уже задача синтакс-анализатора, а не лексера.
Отсюда и по поводу многострочных строк.
В лексере как и в 1С принята парадигма - лексема может размещаться на одной строке.
Поэтому лексером что открытый строковый литерал (не завершающийся кавычкой), что начинающийся с "|" - определяется как обычный строковый литерал.
Дальнейшая их склейка и анализ правильности делается синтакс-анализатором.
Как повод задуматься - в "середине" многострочных литералов вполне возможны комментарии.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: lexer - я чего-то недопонял?
СообщениеДобавлено: 29 окт 2013, 16:13 
Факт. не учел что могут быть комменты так расположны.
За ответ спасибо,


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB