Bir bilgisayar bilimleri ders proje üzerinde fikirler arıyor

14 Cevap php

Selam. Ben Programlama Dilleri İlkeleri başlıklı bir ders alıyorum ve ben bu yaz yapmak için bir proje üzerinde karar vermeniz gerekir. Burada proje gerçekleştirmek için ihtiyaç duyduğu kısa bir versiyonu:

"Projenin doğası dil işleme olduğunu. Bir Scheme / Lisp işlemci bu tip bir proje yazma. C veya Pascal gibi bir dil için bir derleyici de bu tip potansiyel bir projedir. Bazı geçmiş öğrenciler veri tabanları ile ilgili projeleri yaptık ve işleme SQL. Başka olası proje desen eşleştirme ve XML manipüle ile ilgili olabilir. Lisp, Pascal, C ve genellikle en çok yalındır projelerde sonuçlanır. "

Ben web teknolojileri çok ilgileniyorum, vb PHP, MySQL, JavaScript, bazı deneyime sahip ve web tabanlı bir şey yapmak istiyorum, ama herhangi bir fikir geliyor sorun yaşıyorum. Ben de bu yerine sadece sınıfta herkes gibi aynı şeyi yapıyor, bazı öneme sahip olabileceği değerli bir proje olmak istiyorum.

Herhangi bir fikir? Teşekkürler!

EDIT: Gerçekten XHTML / MathML çevirmen için bir Lateks fikir gibi ben, ve ben geri yazdı ki benim öğretim, için fikir geçti:

"Ben fikir ilginç olduğunu düşünüyorum, benim soru (ve sizin) uygun olup olmadığıdır.

Ben bir düşük seviye işaretleme dili olarak lateks düşünüyorum. XHTML veya MathML bu dönüştürme gerçekten düzeyleri ve karmaşıklığı bir değişiklik olup olmadığını merak ediyorum. Ben biraz daha fazla tartışma ve bazı örneklerle ile gelin yapabilirsiniz düşünüyorum. Ayrıca daha kolay denklemleri tanımlamak için yapılan diğer bazı mark-up yapılarının düşünebilirsiniz. "

Bu onu ikna etmek konusunda herhangi bir fikir uygun, ya da benim proje hedefleri için işe yarayabilir bu fikir herhangi uzantıları olabilir?

Kadar tüm yanıtlar için teşekkürler!

14 Cevap

Geçen dönem bu dersi bitmiş :)

Gitmek için en iyi yolu, bir ifade değerlendirici oluşturmaktır IMHO. olabildiğince basit ifade değerlendirici kurmak.

Istediğiniz gibi Sonra birçok olarak sırayla bu özellikler eklemek:

1 - sabit sembolleri, değişkenler için sadece yer tutucular. Lütfen değerlendirici ifade ayrıştırma sonra kendi değerleri için sormalısınız.

2 - zorunludur tarzı değişkenleri. Kullanıcı her yerde kodu bir sembolün değerini değiştirebilirsiniz herhangi bir şart dilde değişkenler gibi.

3 - basit kontrol-deyimleri. Döngü dikkate basit iken 'if-else' ve öntest.

4 - diziler. Eğer gerçekten ifade değerlendirici gerçekten bir programlama dili gibi olmak istiyorum. Eğer 'dili' değişken boyut diziler eklerseniz ilginç olurdu. Bir generic mapping function for your arrays oluşturmak zorunda.

Now you got a real programming language. To be a useful one, you might add subroutines. so the list continuous:

5 - altprogramciklar. Bu önceki özellikleri biraz daha zor, ama imkansız olmamalı :)

6 - dil içinde kendini yeni dil için basit bir matematik kitaplığı oluşturmak! ve bence eğlenceli parçası ;)

Sebest book ünlü zorunludur programlama dilleri Nr iyi bir kitaptır.

Hm, temiz! Belki:

1. Bir web-tabanlı dil tercüman. örneğin, javascript çok basit bir montaj tercüman ya da bir PHP tabanlı C tercüman (PHP script C kodu okur ve yol sandbox türlü çeşit çalıştırır. Açıkçası sadece C küçük bir alt kümesini uygulamak mümkün olacaktır dili)

2. Belki tersi SQL sorguları (PHP diziler gibi) PHP veri yapılarını dönüştürmek ve bazı otomatik yoldur. Bu tür şeyler zaten yapıldı, ancak (örneğin) bir SQL sorgusu alır ve SQL tarafından döndürülen bilgileri "tutmak" için gerekli olacağını dizi datastructure yaratan şey yapmak mümkün olabilir. KATILDI ve GRUBU BYS gibi karmaşık şeyler destekleyebilir.

3. Belki bir C-to-PHP derleyici? (Veya doğal basit bir PHP kodu çalıştırmak edebilmek için bir PHP-to-C derleyicisi. Dillerin herhangi bir kombinasyonu ile bunu kullanın)

edit:

4. Belki bir regex-to-C ayrıştırıcı. Yani, bir regex alır bir şey olduğunu ve desen maç için C kodu üretir. Ya da bir regex alır ve bu ifadenin "matematiksel" çeviri temsil eden bir FSM dönüştürür şey. Ya da tam tersi - bir CFL için bir FSM alır ve bunun için perl-sözdizimi regex üretir şey.

5. Belki bir XML-to-PHP/MySQL ayrıştırıcı. örneğin, bir XML dosyası bir veritabanı ve alanlar hakkında bilgiler içerebilir, ve programı daha sonra bu tabloları oluşturmak için SQL oluşturur veya formlar için HTML / PHP kodu.

İyi şanslar!

PHP tabanlı bir LaTeX-to-MathML çevirmen: İşte ben isterim şey. Her şeyi yapmak zorunda değildir, ama sadece kes-yapıştır bir pencerede geçerli LaTeX kodu yazılı matematiksel formüller ve komut bunu ayrıştırmak ve geçerli MathML dönüştürmek olabilir eğer, bu harika olurdu.

Bana bu biraz daha açalım. Web üzerinde bilimsel yayın mevcut durumu büyük değildir. Başlıklar, vb başlıklar, bölüm sayılar, tablolar, tüm HTML yapılabilir, ancak kesin iki boyutlu biçimlendirme bağlıdır matematiksel ve kimyasal formüller, bilimsel yazarlar sadece ikinci sınıf seçeneğiniz var:

  • Pdf harika görünüyor ama sahip bir (nispeten) büyük dosya boyutu ve iyi köprü ekleyen yapmaz biçimi, ya da kendi çalışmalarını yayınlamak
  • Anlamsal anlamsız ve böylece indeksleme ya da arama kendilerini ödünç değil. Gif dosyaları (ya da benzer bir görüntü dosyası), formülleri dönüştürür gibi bir şey lateks-to-html kullanın.

Ayrıca, bu seçeneklerden hiçbiri eğitim camiasında (rastgele üretilen çevrimiçi ödevlerini düşünmek) için yardımcı olacağını, programlı elde edilecek matematiksel formüller için izin verir.

MathML bilimsel yayıncılık çalışmaları tüm bu sorunların çözmek, ama yani, kendi sorunları birkaç var olacaktır:

  1. Bu elle kod gerçekten çok ayrıntılı bulunuyor. Ben hadi bunu, ancak, demek.
  2. Bilimsel topluluk, yayın için LaTeX kullanır onlar (iyi bir neden için) onunla mutluyuz, ve onlar kendi araştırma ve yapılacak ders-planlama var, başka bir matematiksel işaretleme dili öğrenmek için değil.
  3. MathML için tarayıcı desteği şu anda oldukça sınırlı. Ben bunu biliyorum, ve ben bu konuda Başını kuma sopa anlamına gelmez.

Başka bir deyişle: Bilimsel yazarlar bilimsel içerik yazma için de facto standart, onlar günlük kullanımı, LaTeX biliyorum. MathML değildir ve şimdiye kadar matematik ve fen kaleme yolu olmayacak, ancak internet üzerinde köprü matematik koymak için tek semantik açıdan zengin şekilde bulunuyor. Kimse bunu kullanır, çünkü MathML için tarayıcı desteği zayıftır; elle yazmak çok zor çünkü kimse bunu kullanır. Şimdi, belki bu hüsnükuruntu, ama MathML yazmak için sadece daha kolay olsaydı, (daha fazla bilim adamları ve matematikçiler, özellikle erken benimseyen tipleri, en azından denemek istiyorum, ve bu tarayıcıları ilham inanmak zorunda, özellikle açık- kaynak tarayıcılar) onların desteğini artırmak için, bunlar daha sonra bunu kullanarak daha fazla yazarlara yol açacak, vb

Çevirmen giriyor burada: bariyer-girişine MathML damla için, yaygın olarak kabul edilmesi asla kadar. Basit bir LaTeX-to-MathML dönüştürücü bu dikkat çekmek istiyorum. Bu sıfıra yakın MathML için bariyer-to-girişini azaltacaktır. Bu yaygın kullanımı ve MathML için daha iyi destek açar, bu bilimsel ve eğitim camiası için büyük bir fayda olacaktır.

Böyle bir proje için uzak PHP ve MySQL uzak kalmak istiyorum. Hem pazar payı kazanmak ve kullanıcının sorunları çözmek için temel CS ilkeler bir çok tehlikeye ticari platformlar vardır. Bu projenin noktasında ne gibi sesler size tarif ettik verilen programlama dilleri nasıl işlendiğini düşünmek etmektir. Javascript The Language (değil tarayıcı API) burada iyi bir seçim olabilir. Javascript için bir işlemci / yorumlayıcı / derleyici yazma veya başka bir dil için bir işlemci / yorumlayıcı / derleyici yazmak için Javascript kendisi kullanarak atama kriterlerini karşılayacak. Programın işlevselliğini korurken (daha küçük dosya boyutları için) gereksiz tüm beyaz alanı kaldırır bir JavaScript "minifier" Yazmak başka bir olası projesidir.

Sen önemsiz gibi belirli bir dil bir uygulama oluşturarak görmek gerekir. Herkes muhtemelen ünlü programcı ve birçok kişi bunu başarmak değil istiyor. Bu çok serin nadir dillerde aşina olmak için büyük bir fırsattır. Bu ilk defa bir derleyici / yorumlayıcı yaratıyor ise (Lisp, APL, vb) o zaman da (böylece başarılı bir dili oluşturmak için gerekli olan tasarım öğeleri görebilirsiniz.) Zaten mevcut bir dil ile gitmek için daha iyi bir seçim olacaktır

Önemli fikirleri genellikle zorunluluktan ortaya çıkar. İnsanlar da buna ihtiyacı vardı ya da onlar yapmak istedim görevi başarmak için çok kolay oldu, çünkü bir dil kullanmaya başladı. Burada sıfırdan bir proje başlatmak için cevap ya da motivasyon bulmak sanmıyorum. Söyleniyor, ben her zaman (cgi gibi bir şey kullanmadan) dinamik web siteleri oluşturmak için işlemci doğal bayt kodu kullanan bir dil olması için serin olacağını düşündüm.

Düzenlemenizi yanıt olarak, burada bazı lateks fikirler:

  1. LaTeX-to-ASCII oldukça baskı, belki de sadece TeX küçük bir alt kümesi için
  2. LaTeX-to-Maple/Mathcad/Mathematica script, denklemler, ithal veya düzenlenebilir veya çözülebilir böylece (ki zaten varsa bilmiyorum)
  3. Javascript LaTeX çevirmen. Yazarken tür stackoverflow metin editörü gibi, bunu yazarken size matematik "canlı" görebilirsiniz temelde, bu, / css / .gif / ne olursa olsun html lateks bir çeviri yapar.
  4. Belki bazı C kodu ya da bir şey ifade etmek için lateks makroları tür? Ya da nasıl bu konuda: genellikle, C kodu matematik yapıyor: "det = (b*b - 4*a*c); det_sqrt = sqrt(det); etc" Nasıl aritmetik atamaları bir dizi performans C (ya da java ya da her neyse) kodu alır ve dönüştürür şey hakkında güzel biçimlendirilmiş lateks insan okunabilir (yani, bir \begin{eqnarray} blok) olan denklemlerin listesi
  5. Ya da bir şey yok tam tersi: lateks hesaplamalarda veya denklemlerin bir listesini almak ve gerekli değişkenleri bildirir gerekli kullanıcı girişi alır ve lateks listelenen hesaplamaları gerçekleştiren C kodu üretir?

Neden kullanıcıların tercih uygun web teknolojisi aşağı derlenmiş / yorumlanabilir arayüzü çeşit yazmak değil mi?

Veya C derleyicisi için bir Python gibi bir şey?

Lisp bir Ruby tercüman yazmak: Geçenlerde düşündüm sadece bir şey.

Üzerinde çalışmak için ilginç olabilir şey, Glouchkov algoritmasını kullanarak Otomaton'a bir sıradanifade burada, uygulanabilir bazı temel özellikleri nelerdir

  • Işleçleri Syntaxical analizi
  • Glouchkov algoritmasını kullanarak bir otomat haline dönüştürülmesi
  • Bu otomat / doğrulanıyor ifadeler ile regexpi eşleşen rastgele ifadeler oluşturma
  • XML kullanarak otomatlar İhracat

Eğer birkaç ay içinde işlemek için mümkün olabilir, böylece çok uzun bir atama değil

Eğer ilginç bir şey yapmak istiyorsanız nadvsh ven bir betik dili yapmak için deneyebilirsiniz, ancak sizin eğitmen size bekliyor ne çok kaldırılan olabilir.

New Adventure Shell (nadvsh)

Eğer dil işlemek istiyorsanız, bir UIMA programı yapabilirsiniz. UIMA Yapılandırılmamış Bilgi Yönetimi Mimarlık, yaklaşık 45Million dolarlık bir maliyetle IBM tarafından geliştirilen ve artık opensource edildi duruyor. Temelde UIMA desenleri bulmak için metin belgeleri analiz ascii codec olduğunu. Bu (saman yığınlarının iğneler bulma) hiçbir sipariş olduğu yerde bir şeyler bulmak için yapılır. Bu XML ve C kullanır

Web dilleri ile işi için zengin bir alandır. Ruby on Rails gibi popüler web çerçeve bir göz atın, ve onun verimlilik çok web uygulamaları için domain specific language uygundur uygulayan aslında geldiğini göreceksiniz. Ruby sadece bu yüzden, çünkü dinamik doğası böyle bir dili uygulamak için iyi bir dil olması oldu, ama güç onlar oluşturulan dilinden gelir.

Senin durumunda, belki de bir web çerçevenin temel çekirdek uygulamak için PHP gibi aşina olduğu bir dil kullanarak kendi etki alanı belirli bir dil tasarımı deneyebilirsiniz:

  • sayfalara yönlendirme URL'leri
  • sayfaları üreten dinamik bir şablonu kullanarak (ve belki de kendi sözdizimi şablonu uygulamak!)
  • temel veritabanlarına nesne bağlama (object relational mapping)

Bunun yerine varolan dilden bina really hırslı, bunu yapmak için (vb, lexer, ayrıştırıcı, kod üreteci) yere kadar kendi dilini inşa edebileceğini iseniz.

You can bu massive list. adlı fikirler

Eğer derleyici guru değilse C veya Pascal için derleyici yazma olasılıkla, size aylar ya da yıllar alacaktır.

Basit bir web sunucusu yaz. Bu eğlenceli olacak ve bir basit ve ücretsiz bir çözüm olarak yararlı olabilir. Bir keresinde böyle bir şey yaptım ve basit müşteri siteleri için kullanılan dedi bir adamla tanıştım. Sevgiler de yararlı bir şey haline gelebilir.