Ищете идеи для проекта курса информатики

Привет. Я прохожу курс под названием "Основы языков программирования", и мне нужно выбрать проект для этого лета. Вот краткая версия того, что проект должен выполнить:

"Характер проекта - языковая обработка. Написание процессора Scheme/Lisp - это проект такого типа. Компилятор для такого языка, как C или Pascal, также является потенциальным проектом такого типа. Некоторые бывшие студенты выполняли проекты, связанные с базами данных. и обработка SQL. Другой возможный проект может касаться сопоставления с образцом и манипулирования XML. Lisp, Pascal и C обычно приводят к самым прямым проектам ".

Я очень заинтересован в веб-технологиях и имею некоторый опыт работы с PHP, MySql, JavaScript и т. Д., И я хотел бы сделать что-то ориентированное на Интернет, но у меня возникают проблемы с предложением каких-либо идей. Я также хочу, чтобы это был достойный проект, который мог бы иметь какое-то значение, вместо того, чтобы просто делать то же самое, что и все остальные в классе.

Есть идеи? Спасибо!

РЕДАКТИРОВАТЬ: Мне действительно нравится идея переводчика латекса в XHTML/MathML, и я передал эту идею своему инструктору, в котором он ответил:

"Я думаю, что идея интересная, мой вопрос (и ваш) заключается в том, уместна ли она.

Я думаю о LateX как о языке разметки низкого уровня. Мне интересно, если преобразование этого в XHTML или MathML действительно изменение уровней и сложности. Я думаю, что вы можете высказать свою точку зрения с помощью небольшого количества обсуждения и нескольких примеров. Вы можете также подумать о некоторых других конструкциях разметки, которые облегчили описание уравнений ".

Любые идеи о том, как убедить его в этом, может быть уместным, или какие-либо расширения этой идеи, которые могли бы работать для целей моего проекта?

Спасибо за все ответы до сих пор!

14 ответов

Решение

Я закончил этот курс в прошлом семестре:)

ИМХО, лучший способ - построить оценщик выражений. создайте простейший оценщик выражений, который вы можете.

Затем добавьте эти функции так, как вам нравится:

1- константные символы, просто заполнители для переменных. Ваш анализатор должен запросить их значения после анализа выражения.

2- переменные императивного стиля. Как переменные в любом императивном языке, где пользователь может изменить значение символа в любом месте кода.

3- простые контрольные заявления. 'if-else' и цикл pretest while наиболее просты для рассмотрения.

4- массивы. если вы действительно хотите, чтобы ваш вычислитель выражений был действительно похож на язык программирования. Было бы интересно, если бы вы добавили переменные размерные массивы к своему "языку". Вы должны создать общую функцию отображения для ваших массивов.

Теперь у вас есть настоящий язык программирования. Чтобы быть полезным, вы можете добавить подпрограммы. Итак, список непрерывный:

5- подпрограммы. Это немного сложнее, чем предыдущие функции, но это не должно быть невозможно:)

6- создайте простую математическую библиотеку для вашего нового языка на вашем собственном языке! и это самое интересное, на мой взгляд;)

Книга Sebest - хорошая книга для обзора известных императивных языков программирования.

Хм, аккуратно! Может быть:

1. Веб-переводчик языка. например, очень простой интерпретатор ассемблера в javascript или интерпретатор C на основе PHP (PHP-скрипт читает код на C и выполняет его каким-то образом в песочнице. Очевидно, что он сможет реализовать только небольшое подмножество C язык)

2. Может быть, какой-то автоматизированный способ преобразования структур данных PHP (таких как массивы PHP) в запросы SQL и наоборот. Подобные вещи уже выполнены, но вы можете сделать что-то, что (например) принимает запрос SQL и создает структуру данных массива, которая понадобится для "хранения" информации, возвращаемой SQL. Он может поддерживать сложные вещи, такие как JOINS и GROUP BY.

3. Может быть, компилятор C-to-PHP? (или компилятор PHP-to-C, чтобы иметь возможность запускать простой код PHP непосредственно. Используйте это с любой комбинацией языков)

редактировать:

4. Может быть, парсер regex-to-C. То есть то, что принимает регулярное выражение и генерирует C-код, соответствующий этому шаблону. Или что-то, что принимает регулярное выражение и преобразует его в FSM, который представляет "математический" перевод этого выражения. Или наоборот - то, что принимает FSM для CFL и генерирует регулярное выражение perl-синтаксиса для него.

5. Возможно парсер XML-to-PHP/MySQL. Например, XML-файл может содержать информацию о базе данных и полях, а затем ваша программа создает SQL для создания этих таблиц или код HTML/PHP для форм.

Удачи!

Я бы держался подальше от PHP и MySQL для такого проекта. Обе являются коммерческими платформами, которые скомпрометировали многие основные принципы CS для завоевания доли рынка и решения проблем пользователей. Учитывая то, что вы описали, похоже, что смысл этого проекта - подумать о том, как обрабатываются языки программирования. Javascript The Language (не API браузера) может быть хорошим выбором здесь. Написание процессора / интерпретатора / компилятора для Javascript или использование самого Javascript для написания процессора / интерпретатора / компилятора для другого языка соответствовало бы критериям для назначения. Написание Javascript "minifier", который удаляет все ненужные пробелы (для файлов меньшего размера) при сохранении функциональности программы, является еще одним возможным проектом.

Вот что я хотел бы: переводчик LaTeX-to-MathML на основе PHP. Это не должно было бы делать все, но если бы я мог просто вырезать и вставить математические формулы, написанные в допустимом коде LaTeX, в окно и заставить скрипт проанализировать его и преобразовать в действительный MathML, это было бы здорово.

Позвольте мне подробнее остановиться на этом. Текущее состояние научных публикаций в Интернете невелико. Заголовки, заголовки, номера разделов, таблицы и т. Д. Могут быть выполнены в HTML, но для математических и химических формул, которые зависят от точного двумерного форматирования, у научных авторов есть только варианты второго класса:

  • Публикуйте свои работы в формате pdf, который выглядит великолепно, но имеет (сравнительно) огромный размер файла и плохо выполняет гиперссылки, или
  • Используйте что-то вроде latex-to-html, которое преобразует формулы в файлы.gif (или в некоторый подобный файл изображения), которые не имеют смысла с точки зрения семантики и, следовательно, не пригодны для индексации или поиска.

Более того, ни один из этих вариантов не позволяет создавать математические формулы программным путем, что было бы полезно для образовательного сообщества (подумайте о случайно сгенерированной онлайн домашней работе).

Публикация научной работы в MathML решит все эти проблемы, но у нее есть несколько собственных проблем, а именно:

  1. Это действительно слишком многословно, чтобы кодировать вручную. Я имею в виду, вы можете сделать это, но давай.
  2. Научное сообщество использует LaTeX для публикации, они довольны им (по уважительной причине) и не собираются изучать другой язык математической разметки, когда у них есть собственное исследование и планирование урока.
  3. Поддержка браузеров для MathML в настоящее время довольно ограничена. Я знаю это, и я не хочу сунуть голову в песок об этом.

Другими словами: научные авторы знают LaTeX, они используют его ежедневно, это де-факто стандарт для создания научного контента. MathML не является и никогда не будет тем, чем создаются математика и наука, но это единственный семантически богатый способ размещения гипертекстовой математики в Интернете. Браузерная поддержка MathML слаба, потому что никто не использует его; никто не использует это, потому что это слишком сложно писать от руки. Теперь, может быть, это желаемое за действительное, но я должен верить, что, если бы было проще писать MathML, больше ученых и математиков, особенно типа ранних последователей, по крайней мере попробовали бы это, и это вдохновило бы браузеры (особенно открытые). браузеры исходного кода), чтобы улучшить их поддержку, что привело бы к увеличению числа авторов, использующих его и т. д.

Вот где появляется переводчик: до тех пор, пока барьер для входа в MathML не исчезнет, ​​он никогда не будет широко принят. Об этом позаботится простой конвертер LaTeX-to-MathML. Это уменьшит барьер для входа в MathML почти до нуля. Если это приведет к широкому использованию и лучшей поддержке MathML, это станет большим преимуществом для научных и образовательных сообществ.

Вы не должны рассматривать создание реализации определенного языка как незначительную. Каждый, вероятно, хочет быть известным программистом, и не многие люди достигают этого. Это прекрасная возможность познакомиться с очень крутыми необычными языками. (Lisp, APL и т. Д.) Если вы впервые создаете компилятор / интерпретатор, тогда будет также лучше выбрать уже существующий язык (чтобы вы могли увидеть, какие элементы дизайна необходимы для создания успешного языка).

Важные идеи обычно возникают из необходимости. Люди начали использовать язык, потому что они либо нуждались в нем, либо было намного проще выполнить задачу, которую они хотели сделать. Я не думаю, что вы найдете ответ или мотивацию начать проект с нуля здесь. При этом я всегда думал, что было бы здорово иметь язык, который использует собственный байтовый код процессора для создания динамических веб-сайтов (без использования чего-то вроде cgi).

В ответ на ваши изменения, вот некоторые идеи из латекса:

  1. Прелестная печать LaTeX-ASCII, возможно, только для небольшого подмножества TeX
  2. Сценарий LaTeX-to-Maple/Mathcad/Mathematica, так что уравнения могут быть импортированы, отредактированы или решены (не знаю, существует ли он уже)
  3. Javascript LaTeX переводчик. в основном, когда вы печатаете, он выполняет перевод из латекса в html/css/.gif/ что угодно, так что вы можете видеть свою математику "вживую" по мере ее ввода, что-то вроде текстового редактора stackru.
  4. Возможно, какие-то латексные макросы для выражения кода на C или что-то в этом роде? Или как насчет этого: часто код C выполняет математику: "det = (b*b - 4*a*c); det_sqrt = sqrt(det); etc"Как насчет чего-то, что берет код C (или Java или любой другой), который выполняет серию арифметических присваиваний и преобразует его в хорошо отформатированный латексный список уравнений, которые могут быть восприняты человеком (т. Е. \begin{eqnarray} блок)
  5. Или что-то, что делает обратное: взять список вычислений или уравнений латекса и сгенерировать код на С, который объявляет необходимые переменные, получает требуемый пользовательский ввод и выполняет вычисления, перечисленные в вашем латексе?

Вы можете идеи из этого массивного списка.

Почему бы не написать какой-то интерфейс, который можно интерпретировать / скомпилировать для соответствующей веб-технологии по выбору пользователя?

Или что-то вроде компилятора Python to C?

Просто то, о чем я недавно подумал: написать интерпретатор Ruby на Лиспе.

Интернет является богатой областью для работы с языками. Взгляните на популярный веб-фреймворк, такой как Ruby on Rails, и вы обнаружите, что большая часть его производительности связана с тем, что он реализует язык, специфичный для предметной области, который хорошо подходит для веб-приложений. Просто Ruby оказался хорошим языком для реализации такого языка из-за его динамической природы, но сила исходит от языка, который они из него создали.

В вашем случае, возможно, вы могли бы попытаться разработать свой собственный предметно-ориентированный язык, используя язык, с которым вы знакомы, например, PHP, для реализации основного ядра веб-фреймворка:

  • маршрутизация URL на страницы
  • динамическое создание страниц с использованием шаблона (и, возможно, реализация собственного синтаксиса шаблона!)
  • подключение объектов к базовым базам данных ( реляционное отображение объектов)

Если вы действительно амбициозны, вместо того чтобы строить из существующего языка, вы можете создать свой собственный язык с нуля (лексер, парсер, генератор кода и т. Д.), Чтобы сделать это.

Что-то, над чем может быть интересно работать, это регулярное выражение для автоматизации с использованием алгоритма Глушкова, вот некоторые ключевые функции, которые можно реализовать

  • Синтаксический анализ регулярных выражений
  • Превращение в автомат по алгоритму Глушкова
  • Генерация случайных фраз, соответствующих регулярному выражению с этим автоматом / Проверяющие фразы
  • Экспорт автоматов с использованием XML

Это не очень длинное задание, поэтому вы сможете справиться с ним через несколько месяцев

Если вы хотите обрабатывать язык, вы можете сделать программу UIMA. UIMA расшифровывается как неструктурированная архитектура управления информацией, она была разработана IBM стоимостью около 45 миллионов долларов и теперь доступна с открытым исходным кодом. По сути, UIMA - это кодеки ascii для анализа текстовых документов и поиска шаблонов. Это сделано, чтобы найти вещи там, где нет порядка (поиск игл в стогах сена). Он использует XML и C.

Вы можете попытаться создать язык сценариев в духе nadvsh, если вы хотите сделать что-то интересное, но это может быть слишком далеко от того, что ваш инструктор ожидает от вас.

New Adventure Shell (надвш)

Написание компилятора для C или Pascal, вероятно, займет у вас месяцы или годы, если вы не гуру компилятора.

Написать простой веб-сервер. Это будет весело и может оказаться полезным в качестве простого и бесплатного решения. Однажды я встретил парня, который сказал, что он сделал что-то подобное и использовал для простых сайтов клиентов. Ваша тоже может стать полезной вещью.

Другие вопросы по тегам