|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
||||||||||||||||
Написать распознаватели для лексем13.10.2015, 18:04. Показов 4026. Ответов 36
Метки нет (Все метки)
Написать следующие распознаватели
1) Слово end 2) Идентификатор 3) Число Чтобы выдать значение лексемы, нужно воспользоваться оператором <@, с помощью этого оператора можно собрать результат трансляции. В качестве результата будет значение типа token
У меня вопрос на счет функции maybe и just. Я знаю, как определяется функция maybe:
В фотографиях лекций есть, например, функция epsilon:
Помогите пожалуйста разобраться
1
|
||||||||||||||||
| 13.10.2015, 18:04 | |
|
Ответы с готовыми решениями:
36
Написать анализатор кода, определяющий тип лексем Разработать сканер для выделения лексем из строки текста Выделение лексем |
|
Модератор
|
||||||
| 13.10.2015, 19:43 | ||||||
Сообщение было отмечено danek130995 как решение
Решение
Первые буквы идентификаторов в Haskell значимые! Заглавные для Имён модулей, типов, классов, конструкторов ...
Строчные для функций. Я переписал Ваш конспект, так что заработало. Устал. Вопросы или завтра или не ко мне.
Старый ghc может ругнуться на строчку 3. Тогда удалите её.
5
|
||||||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
| 14.10.2015, 19:06 [ТС] | |
|
KolodeznyDiver, спасибо огромное за Ваш альтруизм! Будем разбираться, и по ходу задавать вопросы, если можно. 2 недели впереди до сдачи, время есть как следует разобраться. Вся группа Вам безмерно благодарна!
0
|
|
|
5 / 5 / 1
Регистрация: 18.03.2014
Сообщений: 106
|
||||||
| 21.10.2015, 19:58 | ||||||
|
KolodeznyDiver, можете, пожалуйста, объяснить, что значат данные выражения:
0
|
||||||
|
Модератор
|
|||||||||||
| 21.10.2015, 20:59 | |||||||||||
|
<*> и <@ - это имена функций, которые были определены (придуманы преподавателем). Имена в Haskell могут быть или обычными - из букв, цифр ( _ ') или полностью состоящими из небукв и нецифр. Подробно.
Функция <*> - весьма распространённая стандартная функция, но делающая другое. Она описана (с версии ghci 7.10) в подключаемом по умолчанию модуле Prelude. Т.к. преподаватель решил использовать уже определённое имя, что бы не путаться, я указываю подключение Prelude без функции <*>
Если Вы не указываете import Prelude, то он, всё равно, подключается, полностью.
2
|
|||||||||||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|||||||||||
| 21.10.2015, 22:02 [ТС] | |||||||||||
|
KolodeznyDiver, подскажите пожалуйста, что означает запись(для чего служит точка)
0
|
|||||||||||
|
Модератор
|
||||||||
| 21.10.2015, 22:52 | ||||||||
Не по теме: Странно. Это, как если бы Вы изучали си, приводили бы пример аналогичной сложности, и спрашивали "а зачем здесь много знаков = ?" А, допустим, в строчке 13 - создать кортеж и "завернуть" его в Just.
2
|
||||||||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|||||||
| 21.10.2015, 23:14 [ТС] | |||||||
|
KolodeznyDiver,
Что означает
0
|
|||||||
|
Модератор
|
|||
| 21.10.2015, 23:28 | |||
![]() ord - функция из Data.Char возвращающая код символа. 32 - код пробела. Коды всяких табуляций, переводов строки и подобных ещё меньше, а печатаемых символов больше. Выражение ord x <= 32 не очень корректное. В том же Data.Char есть isSpace.
3
|
|||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
||
| 21.10.2015, 23:38 [ТС] | ||
|
KolodeznyDiver,извините, все время забываю писать с большой буквы конструкторы. То что хаскель-регистрозависимый язык, я помню)
Добавлено через 3 минуты
0
|
||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|||||||
| 22.10.2015, 12:34 [ТС] | |||||||
|
KolodeznyDiver, скомпилировал пример с foo-и кажись разобрался. Just-просто некий кортеж. Позволяет проверить, что пришло два символа(строчка 71), а также упаковать в этот кортеж (строчка 13)
Добавлено через 3 часа 20 минут KolodeznyDiver, уже начинаю разбираться.. функция spaces убирает пробелы, потом вызывается token xs. Скажите пожалуйста, как работает эта функция? Я вижу
0
|
|||||||
|
Модератор
|
||||
| 22.10.2015, 12:50 | ||||
|
её код же есть.
2
|
||||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|||||||||||
| 22.10.2015, 21:18 [ТС] | |||||||||||
|
KolodeznyDiver, если функция <*> -infixr, то она должна начинать выполнение с самого правого конца здесь?
Как в функцию <@ передается xs? Мы когда вызываем token xs вызывается endWord, в котором куда попадает xs? И что такое (const End)?
0
|
|||||||||||
|
Модератор
|
|||||||||||||
| 22.10.2015, 22:00 | |||||||||||||
Вообще, полезно будет записать сигнатуры для всех функций. Например,
2
|
|||||||||||||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
| 24.10.2015, 13:27 [ТС] | |
|
KolodeznyDiver, Я очень долго размышлял над Вашей программой, многое удалось понять(ну или догадаться), и я все больше и больше поражаюсь ее гениальности.. У меня еще осталось несколько вопросов. Правый аргумент функции <@ -(Id. cons). Я так понимаю, что на вход функции cons идет тоже xs, но в реализации я вижу кортеж (x,xs). Что такое x здесь? А потом к результату применяется Id? Что такое Id здесь?
0
|
|
|
Модератор
|
|||
| 24.10.2015, 14:30 | |||
|
Не по теме:
И, вообще, я ЭТОГО не люблю. cons, очевидно, объединяет их в одну строку, а Id - один из конструторов данных типа Token. См. стр. 46. В целом, преподаватель Вам показывает принцип построения парсера в функциональных языках. В полном, рабочем, виде это пакеты parsec, attoparsec и др. Думаю, преподаватель потом про них скажет.
2
|
|||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
||||||
| 24.10.2015, 15:44 [ТС] | ||||||
|
KolodeznyDiver,
Не по теме: ой, я и забыл про конспект, что это оттуда. В функции <@ сначала выполняется p xs, где p-вся левая большая часть перед <@(левый аргумент
0
|
||||||
|
Модератор
|
|||||||
| 24.10.2015, 16:58 | |||||||
|
Id просто оборачивает строку чтобы её можно было поместить в список токенов. См. результат main.
2
|
|||||||
|
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
| 24.10.2015, 22:09 [ТС] | |
|
KolodeznyDiver, спасибо большое за ответы, с каждым разом я все ближе к финалу) я не понял, как в cons попадает xs и что это в данном случае будет? Я вижу как вызывается функция f y в <@:Just (f y, ys). ys же не может в нее передаваться, иначе он не был бы записан через запятую
0
|
|
| 24.10.2015, 22:09 | |
|
Помогаю со студенческими работами здесь
20
Порядок лексем Подсчет лексем
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|