OSDev http://osdev.su/ |
|
Формальные грамматики http://osdev.su/viewtopic.php?f=30&t=1081 |
Страница 2 из 2 |
Автор: | Yoda [ 20 апр 2015, 19:42 ] |
Заголовок сообщения: | Re: Язык программирования Кантор |
pavia писал(а): Согласно Книге дракона синтаксис и грамматика это одно и тоже. Судя по всему вы имели в виду формальную грамматику. Вообще-то формальную грамматику не я имел ввиду, а вы, т.к. запись LR(N) - это и есть обозначение формальной грамматики. Именно в этом плане и следует различать грамматику и порождаемый ей язык (в данном случае синтаксис). pavia писал(а): Да я знаю что можно свести. У вас ошибка в рассуждениях. Слово "любой" откуда взялось? Если A=>B и B=>C, то A=>C. Слово "любой" вытекает из второго пункта. pavia писал(а): А зачем тогда потребовались раширения EBNF и собственный формат YACC и раширения бизона? Исключительно для удобства, т.к. работать ними проще, чем с формальными грамматиками. pavia писал(а): 1) Они позволяют только повторить то что поддерживает конкретная утилита. Они позволяют реализовать любую КСГ. pavia писал(а): А что-бы добавить придётся переделывать код. Естественно, чтобы что-то добавить, надо что-то изменить. Это тавтология. pavia писал(а): Дело в том что эти утилиты генерируют не человеко понятный код, а машинно ориентированный. Что усложняет поддержку. Из первого не следует второе (что, в целом, справедливо для любого компилятора). pavia писал(а): Дело в том что у Фримана подход функционального программирования (Термин функциональное программирование по Чёрчу). Так вот в таком подходе не предусмотрено указателей. И как следствие всякое подобие дерева отсутствует. Остаётся только рекурсия. функциональное программирование, указатели, AST и рекурсия вообще друг с другом никак не связаны, т.к. ФП - это парадигма программирования, указатели - это семантика языка, AST - продукт синтаксического разбора, я рекурсия - понятие времени выполнения и оптимизации работы программы. |
Автор: | Yoda [ 20 апр 2015, 20:08 ] |
Заголовок сообщения: | Re: Язык программирования Кантор |
Freeman писал(а): При объявлении TSomeClass.MyProp можно использовать любой идентификатор для индекса, но наиболее логичным выглядит Index, его и используют. IDE ошибочно его подсвечивает, но компилятор не считает ключевым словом, и компиляция успешно проходит. А в объявлении TAnotherClass.FirstMy index явно используется как ключевое слово, IDE его также подсвечивает (уже правомерно), и компиляция также успешна. Является ли такое вольное обращение с ключевыми словами нарушением принципов контекстно-свободной грамматики? Честно говоря, с Delphi никогда не имел дело, а с Паскалем последний раз работал лет 25 назад, поэтому вряд ли моё мнение будет здесь авторитетным. На первый взгляд, да, использование ключевого слова в другом контексте как идентификатора нарушает правила КСГ. Однако, во многих языках существуют кучи специально оговоренных ситуаций, когда одни правила отменяются и действуют другие правила. Такие случаи обычно обрабатываются отдельно и как правило при помощи грязного хака могут быть реализованы в более-менее стандартном сканере или парсере. Например, в языках C/C++ отдельно стоящие токены "<" и ">" однозначно выделяются как самостоятельные лексемы. Однако в инструкциях препроцессора (и только в них): Код: #include <stdio.h> они должны быть разобраны вместе с заключённым в них набором символов (который, вообще говоря, может содержать точки, пробелы и другие неприятные символы) как единая лексема. Как обстоит в данном случае дело в Delphi, мне неизвестно. |
Автор: | pavia [ 20 апр 2015, 20:35 ] |
Заголовок сообщения: | Re: Язык программирования Кантор |
Yoda Вы заблуждаетесь. Цитата: Они позволяют реализовать любую КСГ. А кому КСГ нужна? Не кому!Все языки таковыми не являются! Взять самый простой язык математики на пример при программирование калькулятора у которого +- интерпретируются как бинарные так и унарные. Приоритеты операций требуют либо свёртки либо переместить в стек. Без анализа окружающих символов определить приоритет не возможно. Для этого создали EBNF. Но это только один пример. По мимо приоритетов. Есть и другие, к примеру левые и правые атрибуты у операторов. Не помню точно в каком языке вроде в Си++ оператор "*" менял свои свойства с левого на правый в зависимости от контекста. Или самый известный пример проблема висячего Else. Наибольшее число отступлений от КСГ у BISON. Всё генераторы парсеров реализуют формальную грамматику, а не КСГ. Цитата: функциональное программирование, указатели, AST и рекурсия вообще друг с другом никак не связаны, т.к. ФП - это парадигма программирования, указатели - это семантика языка, AST - продукт синтаксического разбора, я рекурсия - понятие времени выполнения и оптимизации работы программы. Вот именно что парадигма! Именно из неё и вытекает цепочка. Иначе как только вы введёте понятия указателя вы попадёте уже в другую парадигму.
|
Автор: | Freeman [ 20 апр 2015, 21:17 ] |
Заголовок сообщения: | Re: Язык программирования Кантор |
Yoda писал(а): На первый взгляд, да, использование ключевого слова в другом контексте как идентификатора нарушает правила КСГ. Однако, во многих языках существуют кучи специально оговоренных ситуаций, когда одни правила отменяются и действуют другие правила. Такие случаи обычно обрабатываются отдельно и как правило при помощи грязного хака могут быть реализованы в более-менее стандартном сканере или парсере. Да, спасибо. Примерно такой ответ я и хотел услышать. Могу предположить, что в Delphi трактовка слова index как ключевого ограничена предложением property и тем, что index находится вне квадратных скобок. Внутри квадратных скобок index однозначно не может быть, и это правило, по всей видимости, прописано как одна из особых ситуаций. Yoda писал(а): Как обстоит в данном случае дело в Delphi, мне неизвестно. У меня нет исходников Delphi, чтобы можно было посмотреть в них и сказать, как оно там на самом деле. А теории, на которые вы ссылаетесь, являются вроде как универсальными, чтобы быть авторитетными сами по себе. Вот только с их трактовкой на практике, как выясняется, не всё однозначно, поэтому у меня и не получился вывод, поскольку я плясал от практики. Уважаемый pavia, вы путаете теорию и реализацию! Употребляйте термины правильно, пожалуйста! В целом я догадываюсь, что вы имеете в виду, и даже мог бы высказаться, но сначала подожду, пока страсти улягутся. А то как бы резать тему не пришлось, как в старые недобрые времена. |
Автор: | pavia [ 20 апр 2015, 22:51 ] |
Заголовок сообщения: | Re: Язык программирования Кантор |
Это не я путаю. Это всё Хомский с его классификацией. Он рассматривал LR и RR языки в качестве КС грамматик что правильно. Но в выводах сделал фразу что к КС относятся формальные грамматики. С чем я категорически не согласен. Так как к такому обобщению не было ни каких предпосылок по всему тексту. Хотя оно и не противоречило в виду отсутствия определений на тот момент. Возможно он имел ввиду под формальными принадлежность к классу BNF грамматик. И тогда всё встаёт на свои места. Но вот последующие авторы уже стали считать что все формальные языки это КС. Когда как к таковым относится только BNF с LR или RR парсером. Нам никто не запрещает написать BNF грамматику и сделать парсер в котором порядок будет зависеть от контекста. Более того я отношу все расширения генераторов к такому отступлению. Так что в определение КС языка я отхожу от Хомского. О чем я уже говорил. Ваш вопрос про index это из той же оперы. Относится ли Delphi к КС языкам или нет? С моей точки зрения такое по видения index является типичным провидением НеКС языка. |
Автор: | Yoda [ 21 апр 2015, 11:38 ] |
Заголовок сообщения: | Re: Язык программирования Кантор |
pavia писал(а): А кому КСГ нужна? Не кому! Все языки таковыми не являются! Взять самый простой язык математики на пример при программирование калькулятора у которого +- интерпретируются как бинарные так и унарные. Тяжёлый случай воинствующего дилетантизма. Не вижу смысла в дальнейшем обсуждении данного вопроса. Я закончил. |
Автор: | pavia [ 23 апр 2015, 18:47 ] |
Заголовок сообщения: | Re: Формальные грамматики |
Любая компиляция переходов осуществляется в 2-прохода. Вначале вычисления адреса, а затем запись. Что касается многопроходности ассемблеров,то она связана с макросами. Их компиляция осуществляется путем раскрутки. Цитата: В C++ это решено заголовочными файлами, в Паскале -- интерфейсными секциями и ключевым словом forward, Типичное заблуждения паскалиста.Заголовочные файлы в Си++ не такие как в паскале. Внутри проекта в Си/Си++ ссылаться можно на любую функцию из любого файла. Для того что-бы собрать файлы в один с используются make файлы со специальной утилитой специально сделанной для Си - Cmake . Более того есть мнение не моё что в Си++ плохо с объявлениями. Поэтому компиляторы вынуждены постоянно обращаться то к одним файлам то к другим, что замедляет компиляцию в разы. |
Автор: | rst256 [ 01 окт 2015, 01:30 ] |
Заголовок сообщения: | Re: Формальные грамматики |
pavia писал(а): Заголовочные файлы в Си++ не такие как в паскале. Внутри проекта в Си/Си++ ссылаться можно на любую функцию из любого файла. Для того что-бы собрать файлы в один с используются make файлы со специальной утилитой специально сделанной для Си - Cmake . Более того есть мнение не моё что в Си++ плохо с объявлениями. Поэтому компиляторы вынуждены постоянно обращаться то к одним файлам то к другим, что замедляет компиляцию в разы. В с++ это давно решено, см. компиляция заголовков. А по теме с/с++ синтаксис не описывается в рамках КСГ, например поведение оператора * зависит от контекста т.е. от типа (указатель/не указатель) P.S. А красным я пометил БРЕД. |
Автор: | Yoda [ 01 окт 2015, 12:23 ] |
Заголовок сообщения: | Re: Формальные грамматики |
rst256 писал(а): А по теме с/с++ синтаксис не описывается в рамках КСГ, например поведение оператора * зависит от контекста т.е. от типа (указатель/не указатель) Прежде, чем писать, вы бы для начала ознакомились, что такое "контекстно свободная грамматика" и чем она отличается от контекстно зависимой грамматики. Hint: вы перепутали синтаксис с семантикой. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |