2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Литература по созданию языков программирования
Сообщение03.10.2015, 23:22 
Заслуженный участник


27/04/09
28128
Pavia в сообщении #1058901 писал(а):
Делайте проще. Отсеивайте комментарии на стадии разбора лексем.
Это был наводящий вопрос. Очевидно, rockclimber тоже знал, что в таком случае поступают так.

Pavia в сообщении #1058901 писал(а):
Модуль
Может, всё-таки, Модула? :wink:

 Профиль  
                  
 
 Re: Литература по созданию языков программирования
Сообщение03.10.2015, 23:24 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
arseniiv в сообщении #1058932 писал(а):
Это был наводящий вопрос. Очевидно, rockclimber тоже знал, что в таком случае поступают так.
Я тут вообще ни при чем, Pavia просто неправильно процитировал.

 Профиль  
                  
 
 Re: Литература по созданию языков программирования
Сообщение04.10.2015, 00:13 
Заслуженный участник


27/04/09
28128
Оу, простите, не проверил.

 Профиль  
                  
 
 Re: Литература по созданию языков программирования
Сообщение04.10.2015, 03:38 
Заслуженный участник


16/02/13
4105
Владивосток
Pavia в сообщении #1058901 писал(а):
А что-бы работало быстро надо переводить в ДКА
Ну, таки в ДКА переводят отнюдь не скорости для. Для скорости используют компиляцию в ДКА вместо интерпретации.
Pavia в сообщении #1058901 писал(а):
забыть про все вопросы КЗ и составить грамматику так что-бы в нём не было таких зависимостей. Что сделал Вирт создавая свои языки
Странная фраза. Язык с обязательным описанием переменных не может задаваться КС-грамматикой. Собственно, язык без обязательного описания — тоже. Можно вынести контекстные зависимости в отдельную тему, как, собственно, все и делают.

-- 04.10.2015, 10:45 --

И на всякий случай добавлю: вся эта теория, LL, LR, Bison, Yacc, восстановление ошибок (вот уж жуть жуткая) — очень интересна и захватывающа сама по себе; но если не стоит цель реализовать серьёзный язык (посерьёзнее Паскаля), таки быстрее не заморачиваться ею, а сесть да написать. Ну вот просто рекурсивным спуском.

 Профиль  
                  
 
 Re: Литература по созданию языков программирования
Сообщение04.10.2015, 08:23 
Аватара пользователя


31/10/08
1244
iifat
Видимо это сложно и надо пояснить мысль.
iifat в сообщении #1058971 писал(а):
Ну, таки в ДКА переводят отнюдь не скорости для. Для скорости используют компиляцию в ДКА вместо интерпретации.

Алгоритм разбор строки классический НКА является многопроходным, в отличии от ДКА. Поэтому и переводят НКА в ДКА. Отсюда и прирост в скорости.
Пусть есть правило
Используется синтаксис Text
животное:=
  | 'кот'
  | 'пёc';

И входная строка которую надо разобрать 'котопёс'.

Суть в том что при разборе строки. У нас есть каретка которая перемещается вдоль строки до тех пор пока автомат не встанет на развилке.
В нашем примере грамматика сразу начинается с развилки.
Алгоритм А)
Если одна ветка правила не срабатывает, то корректора возвращается в исходное состояние и проверяется следующая ветка.
Алгоритм Б)
Порождаются две или более кареток, каждая из которых идёт своим путем по грамматике.

код: [ скачать ] [ спрятать ]
Используется синтаксис Text
котопёс
^0--------- исходное состояние

котопёс
  ^1------- сработало
кот

//Возвращаем каретку проверяем вторую ветку.
котопёс
^2--------- не сработало
пёс

//далее смещается исходное состояние
котопёс
 ^0--------- исходное состояние

//и далее алгоритм идёт по кругу
 


Отличия ДКА от НКА в том что все возможные состояния(положения кареток) автомата НКА перечисляются в программе-автомата ДКА. При этом состояния, которые относятся к одной позиции в строке и к одной общей букве объединяются в одно общее состояние автомата. Теперь каретке не нужно бегать взад и вперёд по строке, достаточно идти от элемента к элементу.

код: [ скачать ] [ спрятать ]
Используется синтаксис Text
котопёс
^----------- s1 - работа

котопёс
 ^----------- s2 - работа

котопёс
  ^----------- s4 - вывод от -3 позиции

котопёс
   ^----------- s5 - работа
..
котопёс
     ^----------- s100 - работа

котопёс
      ^----------- s101 - вывод от -3 позиции
 


iifat в сообщении #1058971 писал(а):
Странная фраза. Язык с обязательным описанием переменных не может задаваться КС-грамматикой.
А где говорилось о задании? Задание подразумевает полное описание языка. Здесь речь шла только о формальное описание языка. Разумеется в нормальном языке программирования помимо этого присутствует семантическая часть. Если хотите детально это обсудить давайте заведём отдельную тему.

 Профиль  
                  
 
 Re: Литература по созданию языков программирования
Сообщение04.10.2015, 11:29 
Заслуженный участник


16/02/13
4105
Владивосток
Pavia в сообщении #1058994 писал(а):
Алгоритм разбор строки классический НКА является многопроходным
Отсюда и далее — обсуждение реализации. К собственно НКА отношение имеет достаточно опосредованное. Поскольку одним из вариантов реализации НКА как раз и является перевод в ДКА.

-- 04.10.2015, 18:31 --

Pavia в сообщении #1058994 писал(а):
А где говорилось о задании?
А это, по-вашему, что?
rockclimber в сообщении #934909 писал(а):
на данный момент мне предстоит создать некий простенький DSL

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group