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


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

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

.

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

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

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

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

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

.

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

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

Author: Domenic, 2009-07-06

14 answers

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

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

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

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

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

3- простые управляющие операторы. "если-иначе" и цикл предварительного тестирования while являются самыми простыми для рассмотрения.

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

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

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

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

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

 2
Author: AraK, 2009-07-06 02:12:36

Хм, здорово! Может быть:

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

2. Возможно, какой-то автоматизированный способ преобразования структур данных PHP (например, массивов PHP) в запросы SQL и наоборот. Такого рода вещи уже были сделаны, но возможно, вы сможете сделать что-то, что (например) принимает SQL-запрос и создает структуру данных массива, которая потребуется для "хранения" информации, возвращаемой SQL. Он может поддерживать сложные вещи, такие как ОБЪЕДИНЕНИЯ и ГРУППОВЫЕ ГРУППЫ.

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

Изменить:

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

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

Желаю удачи!

 5
Author: poundifdef, 2009-07-06 02:49:50

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

 4
Author: Alan Storm, 2009-07-05 23:13:52

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

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

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

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

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

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

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

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

 4
Author: Alex Basson, 2009-07-07 04:53:30

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

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

 2
Author: Patrick Gryciuk, 2009-07-05 23:17:28

В ответ на ваше редактирование, вот несколько идей latex:

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

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

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

 0
Author: samoz, 2009-07-05 22:45:23

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

 0
Author: Svante, 2009-07-05 22:59:43

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

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

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

 0
Author: Lau, 2009-07-05 23:09:23

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

Новая приключенческая оболочка (надвш)

 0
Author: Coding With Style, 2009-07-05 23:16:05

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

 0
Author: yan bellavance, 2009-07-05 23:22:47

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

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

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

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

 0
Author: alanlcode, 2009-07-05 23:32:17

Вы можете найти идеи из этого обширного списка.

 0
Author: drikoda, 2009-07-06 02:49:54

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

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

 -2
Author: User, 2009-07-05 22:46:21