寻找计算机科学课程项目的想法

时间:2009-07-05 22:39:14

标签: php xml parsing compiler-construction computer-science

嘿。我正在上一门名为“编程语言原理”的课程,我需要决定今年夏天要做的项目。以下是项目需要完成的简短版本:

“项目的本质是语言处理。编写Scheme / Lisp处理器是这​​种类型的项目。像C或Pascal这样的语言的编译器也是这种类型的潜在项目。一些过去的学生已经完成了项目与数据库和处理SQL相关。另一个可能的项目可能与模式匹配和操作XML有关.Lisp,Pascal和C通常会导致最直接的项目。“

我对网络技术很感兴趣,并且对PHP,MySql,JavaScript等有一些经验,我想做一些面向Web的工作,但是我无法想出任何想法。我也希望这是一个有价值的项目,可能有一些意义,而不是像在课堂上做其他人一样。

有什么想法吗?谢谢!

编辑:我非常喜欢Latex到XHTML / MathML翻译器的想法,我把这个想法传递给了我的导师,他回信说:

“我认为这个想法很有意思,我的问题(以及你的问题)是否合适。

我认为LateX是一种低级标记语言。我想知道将它转换为XHTML或MathML是否真的是级别和复杂性的变化。我想你可以通过更多的讨论和一些例子来说明你的观点。您可能还会想到一些其他标记结构,这使得描述方程更容易。“

关于如何让他相信这一点的任何想法都可能是合适的,或者这个想法的任何扩展都可以用于我的项目目标?

感谢目前为止的所有回复!

14 个答案:

答案 0 :(得分:5)

嗯,干净!也许:

1.基于网络的语言翻译。例如,javascript中的一个非常简单的汇编解释器,或者基于PHP的C解释器(PHP脚本读取C代码,并以某种沙盒方式执行它。显然它只能实现C的一小部分语言)

2.也许是一种将PHP数据结构(如PHP数组)转换为SQL查询的自动化方法,反之亦然。这种东西已经完成了,但你可以做一些事情(例如)接受SQL查询并创建“保持”SQL返回的信息所需的数组数据结构。它可以支持复杂的事情,如JOINS和GROUP BYs。

3.也许是一个C-to-PHP编译器? (或者是PHP-to-C编译器,能够本地运行简单的PHP代码。将它与任何语言组合使用)

编辑:

4.也许是一个正则表达式到C的解析器。也就是说,需要一个正则表达式,并生成C代码来匹配该模式。或者采用正则表达式的东西,并将其转换为表示该表达式的“数学”翻译的FSM。或者恰恰相反 - 为CFL采用FSM并为其生成perl语法正则表达式。

5.也许是XML-to-PHP / MySQL解析器。例如,XML文件可能包含有关数据库和字段的信息,然后您的程序会创建SQL来创建这些表,或者创建表单的HTML / PHP代码。

祝你好运!

答案 1 :(得分:4)

对于像这样的项目,我会远离PHP和MySQL。两者都是商业平台,已经破坏了许多核心CS原则,以获得市场份额和解决用户的问题。鉴于您所描述的内容,听起来这个项目的重点是考虑如何处理编程语言。 Javascript 语言(不是浏览器API)可能是一个不错的选择。为Javascript编写处理器/解释器/编译器或使用Javascript本身为另一种语言编写处理器/解释器/编译器将满足分配的标准。编写一个Javascript“minifier”,删除所有不必要的空格(对于较小的文件大小),同时保持程序的功能是另一个可能的项目。

答案 2 :(得分:4)

这是我喜欢的东西:基于PHP的LaTeX-to-MathML翻译器。它不需要做任何事情,但如果我可以将用有效LaTeX代码编写的数学公式剪切并粘贴到窗口中并让脚本解析它并将其转换为有效的MathML,那就太棒了。

让我再详细说明一下。网上科学出版的现状并不乐观。标题,标题,章节编号,表格等都可以用HTML完成,但对于依赖于精确二维格式的数学和化学公式,科学作者只有二等选项:

  • 以pdf格式发布他们的作品,看起来很棒,但文件大小(相当)很大,并且没有做超级链接,或者
  • 使用像latex-to-html这样的东西,它将公式转换为.gif文件(或类似的图像文件),这些文件在语义上毫无意义,因此不适合索引或搜索。

此外,这些选项都不允许以编程方式生成数学公式,这对教育界有用(想想随机生成的在线作业)。

使用MathML发布科学作品可以解决所有这些问题,但它有一些问题,即:

  1. 手工编码真的太冗长了。我的意思是,你可以做到,但来吧。
  2. 科学界使用LaTeX进行出版,他们对此感到满意(有充分理由),当他们有自己的研究和课程计划时,他们不会学习另一种数学标记语言。
  3. 目前,MathML的浏览器支持非常有限。我知道这一点,我并不是要把头埋在沙子里面。
  4. 换句话说:科学作者知道LaTeX,他们每天都使用它,它是创作科学内容的事实上的标准。 MathML不是也不会成为数学和科学的创作方式,但它是将超文本数学放在网络上的唯一语义丰富的方法。对MathML的浏览器支持很弱,因为没有人使用它;没人用它,因为手写太难了。现在,也许这是一厢情愿的想法,但我必须相信,如果只编写MathML更容易,更多的科学家和数学家,特别是早期采用者类型,至少会尝试它,这会激发浏览器(特别是开放式)源浏览器)以改善他们的支持,这将导致更多的作者使用它等等。

    以下是译者的用武之地:在MathML的入门障碍下降之前,它永远不会被广泛采用。一个简单的LaTeX-to-MathML转换器就可以解决这个问题。它会将MathML的入口障碍减少到接近零。如果它导致对MathML的广泛使用和更好的支持,那将是科学和教育界的一个主要好处。

答案 3 :(得分:2)

您不应将创建特定语言的实现视为无关紧要。每个人都可能希望成为一名着名的程序员,并没有多少人能够实现它。这是一个熟悉非常酷的罕见语言的好机会。 (Lisp,APL等)如果这是您第一次创建编译器/解释器,那么使用已存在的语言也是更好的选择(因此您可以看到创建成功语言需要哪些设计元素。)

重要的想法通常来自必要性。人们开始使用一种语言,因为他们要么需要它,要么完成他们想要完成的任务要容易得多。我认为你不会在这里找到从头开始项目的答案或动机。话虽这么说,我一直认为使用一种使用处理器原生字节代码来创建动态网站的语言会很酷(不使用像cgi这样的东西)。

答案 4 :(得分:2)

我上学期完成了这门课程:)

恕我直言,最好的方法是建立一个表达式评估器。构建最简单的表达式求值程序。

然后按照您的喜好添加这些功能:

1 - 常量符号,只是变量的占位符。您的评估者在解析表达式后应该询问它们的值。

2 - 命令式风格变量。与任何命令式语言中的变量一样,用户可以在代码中的任何位置更改符号的值。

3 - 简单的控制语句。 'if-else'和pretest while循环是最容易考虑的。

4 - 数组。如果你真的希望你的表达式评估器真的像编程语言。如果将变量维数组添加到“语言”中会很有趣。你必须建立一个generic mapping function for your arrays

现在你有了一种真正的编程语言。要成为一个有用的,您可以添加子例程。 所以列表连续:

5 - 子程序。这比以前的功能稍微难点,但这不应该是不可能的:)

6 - 用您自己的语言为您的新语言构建一个简单的数学库!这是我认为有趣的部分;)

Sebest book是一本很好的书,可以概述着名的命令式编程语言。

答案 5 :(得分:1)

为了回应您的编辑,以下是一些乳胶创意:

  1. LaTeX-to-ASCII漂亮的打印,可能仅适用于TeX的一小部分
  2. LaTeX-to-Maple / Mathcad / Mathematica脚本,以便可以导入或编辑或解决方程式(不知道是否已存在)
  3. Javascript LaTeX翻译器。基本上,当你输入时,它会执行从latex到html / css / .gif / whatever的转换,所以你可以在输入时看到你的数学“实时”,有点像stackoverflow文本编辑器。
  4. 也许用于表达C代码的某种乳胶宏?或者是这样的:通常,C代码正在进行数学运算:“det = (b*b - 4*a*c); det_sqrt = sqrt(det); etc”如何使用C(或java或其他)代码执行一系列算术赋值,并将其转换为良好的代码格式化乳胶人类可读的方程式列表(即\begin{eqnarray}块)
  5. 或者相反的事情:列出乳胶计算或方程式,并生成C代码,声明必要的变量,获得必要的用户输入,并执行乳胶中列出的计算?

答案 6 :(得分:0)

为什么不编写某种可以解释/编译成用户选择的适当网络技术的界面?

或类似Python to C编译器?

答案 7 :(得分:0)

我最近想到的是:在Lisp中编写一个Ruby解释器。

答案 8 :(得分:0)

可以使用有趣的东西,是使用Glouchkov算法的自动机的regexp,这里有一些可以实现的关键功能

  • 正则表达式的语法分析
  • 使用Glouchkov算法转换为自动机
  • 生成与正则表达式匹配的随机短语与该自动机/验证短语
  • 使用XML导出自动机

这不是一个很长的任务,所以你可以在几个月内处理它

答案 9 :(得分:0)

如果你想做一些有趣的事情,你可以尝试使用nadvsh的脚本编写一种脚本语言,但它可能会超出你的教师所期望的那样。

New Adventure Shell (nadvsh)

答案 10 :(得分:0)

如果您想处理语言,可以执行UIMA程序。 UIMA代表非结构化信息管理架构,它由IBM开发,耗资约4500万美元,现在可用于开源。基本上,UIMA是ascii编解码器,用于分析文本文档以查找模式。这是为了找到没有秩序的东西(在干草堆中找到针)。它使用XML和C.

答案 11 :(得分:0)

网络是一个用于处理语言的丰富区域。看看像Ruby on Rails这样的流行Web框架,你会发现它的大部分工作效率来自于它实现了一个非常适合Web应用程序的domain specific language。 Ruby恰好是一种很好的语言来实现这种语言,因为它具有动态性,但它的力量来自于它们从中创建的语言。

在您的情况下,也许您可​​以尝试使用您熟悉的语言(如PHP)设计自己的特定于域的语言,以实现Web框架的基本核心:

  • 将网址路由到网页
  • 使用模板动态生成页面(并且可能实现您自己的模板语法!)
  • 将对象连接到基础数据库(object relational mapping

如果您非常雄心勃勃,那么您可以从头开始构建自己的语言(词法分析器,解析器,代码生成器等),而不是使用现有语言构建。

答案 12 :(得分:0)

您可以从massive list.

中获取想法

答案 13 :(得分:-2)

如果您不是编译器专家,为C或Pascal编写编译器可能需要数月或数年。

编写一个简单的Web服务器。这将是有趣的,可能会被证明是一个简单而免费的解决方案。我曾经见过一个人,他说他做过这样的事情并用于简单的客户网站。你的也可能成为一个有用的东西。