ΠΩΣ ΜΠΟΡΩ ΝΑ ΦΤΙΑΞΩ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ???

Ξεκίνησε από maCintOsh__, 08 Ιουν 2007, 12:05:52 ΠΜ

« προηγούμενο - επόμενο »

maCintOsh__

ΘΕΛΩ ΝΑ ΦΤΙΑΞΩ ΜΙΑ ΔΙΚΙΑ ΜΟΥ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ,  ΕΤΣΙ ΑΠΛΑ ΓΙΑ ΤΙΝ ΕΜΠΙΡΙΑ, ΓΙΑ ΜΕΝΑ ΜΟΝΟ,
ΚΑΙ ΘΕΛΩ ΝΑ ΕΙΝΑΙ Η ΓΛΩΣΣΑ ΟΠΟΣ Η "ΨΕΥΔΟΓΛΩΣΣΑ" Ο ΔΙΕΡΜΙΝΗΥΤΗΣ, ..
ΤΙ ΓΝΟΣΙΣ ΠΡΕΠΕΙ ΝΑ ΓΝΩΡΙΖΟ ΓΙΑ ΝΑ ΤΟ ΚΑΝΩ ΑΥΤΟ???

If your a good hacker, everyone knows your name. If your a great hacker, no one knows who you are.

evry

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

maCintOsh__

ΕΣΤΟ ΜΙΑ ΠΟΛΥ ΑΠΛΗ (ΑΚΟΜΑ ΚΑΙ ΠΙΟ ΑΠΛΗ ΑΠΟ ΤΟΝ ΔΙΕΡΜΗΝΕΥΤΗ)
ΑΛΛΑ ΠΩΣ????
If your a good hacker, everyone knows your name. If your a great hacker, no one knows who you are.

evry

  Θα πρέπει να ψάξεις υλικό για compiler construction κλπ. Αν και δεν έχω το τμήμα πληροφορικής του ΟΠΑ σε μεγάλη εκτίμηση μπορείς να βρεις αρκετό υλικό στο http://eclass.aueb.gr/TMA114/. Ξεκίνα από εδώ και βλέπεις. Πάντως γενικότερα για να ασχοληθείς με αυτόν τον τομέα πρέπει να έχεις γράψει αρκετές γραμμές κώδικα σε γλώσσες όπως C, C++ κατά τη γνώμη μου.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

maCintOsh__

ΕΓΩ ΤΟ ΜΟΝΟ ΠΟΥ ΞΕΡΩ ΕΙΝΙΑ : VISUAL BASIC 6 , ΜΕΡΙΚΑ ΠΡΑΜΜΑΤΑ ΑΠΟ PYTHON , ΚΑΤΙ ΨΙΛΑ ΑΠΟ HTML.
ΑΥΤΑ  :-[ :-[
If your a good hacker, everyone knows your name. If your a great hacker, no one knows who you are.

evry


  Για VB 6  ξέχνα το, αν είναι να κάνεις κάτι θα το κάνεις με python. Επειδή η Python υποστηρίζει κανονικές εκφράσεις (αφού το κάνει η Perl θα το κάνει και η Python) θα είναι πολύ εύκολο να φτιάξεις καταρχήν το λεκτικό κομμάτι του compiler. Δεν έχω ασχοληθεί με Python αλλά νομίζω ότι το εργαλείο Antlr υποστηρίζει και την Python. Ψάξτο και μπορεί να βρεις κάτι.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

maCintOsh__

Python μου φαίνεται καλή γλωσσά , θέλω να μάθω Perl, αλλά δεν ξερώ από πού να αρχίσω, ..
Δηλαδή είναι δύσκολο να φτιάξης μια δικιά σου γλωσσά?? Η ένα μεταγλοτιστη ?
Και για τη να ξεχάσω την VB6 ? τι έχει?
Μονό το γραφικό της περιβάλλον τιν χαλάει….


If your a good hacker, everyone knows your name. If your a great hacker, no one knows who you are.

alkisg

Minotech,

απλοποιώντας υπερβολικά το θέμα, ας πούμε ότι υπάρχουν 3 τρόποι για να φτιάξεις μια γλώσσα:

1) Να κάνεις έναν μεταφραστή που θα μεταφράζει από τη δική σου γλώσσα σε μια άλλη. Αυτή τη φιλοσοφία ακολουθεί ο compiler της Γλωσσομάθειας, που μεταφράζει από ΓΛΩΣΣΑ σε Pascal.
Δηλαδή όπου βλέπεις ΠΡΟΓΡΑΜΜΑ το κάνεις PROGRAM, όπου ΜΕΤΑΒΛΗΤΕΣ το κάνεις VAR κτλ.
Είναι αρκετά απλό, αν η αρχική και η τελική γλώσσα είναι παρόμοιες. Ο χρόνος ανάπτυξης θα είναι πιστεύω της τάξης κάποιων εβδομάδων.

2) Να κάνεις έναν διερμηνευτή που θα μεταφράζει τη δική σου γλώσσα σε μια εσωτερική αναπαράσταση και μετά θα την εκτελεί. Αυτή τη φιλοσοφία ακολουθεί ο Διερμηνευτής της ΓΛΩΣΣΑΣ. Είναι αρκετά πιο δύσκολο, εκτός του ότι χρειάζεται να φτιάξεις κανονικό parser, πρέπει να υλοποιήσεις και το εσωτερικό περιβάλλον εκτέλεσης.
Ο χρόνος ανάπτυξης (μόνο για parsing/εκτέλεση) θα είναι πιστεύω της τάξης κάποιων μηνών.

3) Να κάνεις έναν κανονικό μεταγλωττιστή, που θα μεταφράζει από τη δική σου γλώσσα είτε σε assembly είτε σε κάποια ενδιάμεση αναπαράσταση, π.χ. jvm της Java, clr της Microsoft κτλ.
Υπάρχουν διάφορα utilities που μπορείς να χρησιμοποιήσεις, bison, flex, ή π.χ. τα abstract syntax trees του gcc ώστε να εκμεταλλεύεσαι τα backends του.
Είναι η πιο δύσκολη περίπτωση, για να κάνεις κάτι τέτοιο θα χρειαστείς πάνω από 1 χρόνο για διάβασμα μόνο και τουλάχιστον 1 χρόνο ακόμα για μια πρώτη υλοποίηση.

Δυστυχώς απ' ότι λες δεν έχεις μεγάλη εμπειρία σε προγραμματισμό για να προσπαθήσεις κάτι από τα (2) και (3). Οπότε θα σου πρότεινα να ασχοληθείς με το (1): Δοκίμασε να κάνεις ένα πρόγραμμα που θα διαβάζει ένα αρχείο με κάποιον αλγόριθμο σε ψευδογλώσσα, να το μεταφράζει στις αντίστοιχες αγγλικές λέξεις της python και μετά να το εκτελεί με την eval της python.
Το πλεονέκτημα της python έναντι της vb είναι ότι "κουβαλάει" μαζί της τον διερμηνευτή της μέσα από την συνάρτηση eval. Ενώ αν προσπαθήσεις κάτι αντίστοιχο σε vb θα πρέπει να ...μοιράζεις και την vb6 μαζί με τη γλώσσα σου.

maCintOsh__

Όταν λες μεταφραστή, (1) θες να πεις ότι θα μεταφράζει την γλωσσά μου σε Pascal??
Μήπως μπορώ να φτιάξω ?? αν έχεις Link, Guides, Tutorials, αν μπορείς στύλε μου,
Και αν είναι στα ελληνικά ακόμη καλυτέρα.
Ευχαριστώ.
:)
If your a good hacker, everyone knows your name. If your a great hacker, no one knows who you are.

alkisg

Διάβασε λίγο πάλι την τελευταία παράγραφό μου. Προτείνω να τα μετατρέπεις σε Python, όχι σε Pascal (αφού Python είπες ότι ξέρεις). Και την εκτέλεσή του μεταφρασμένου κώδικα μετά την κάνει η ίδια η Python.

Για συνδέσμους κτλ κάνε αναζήτηση στο google με τη φράση
source to source translator python

ΜΙΤΜ

Παράθεση από: alkisg στις 08 Ιουν 2007, 08:54:06 ΠΜ
2) Να κάνεις έναν διερμηνευτή που θα μεταφράζει τη δική σου γλώσσα σε μια εσωτερική αναπαράσταση και μετά θα την εκτελεί. Αυτή τη φιλοσοφία ακολουθεί ο Διερμηνευτής της ΓΛΩΣΣΑΣ. Είναι αρκετά πιο δύσκολο, εκτός του ότι χρειάζεται να φτιάξεις κανονικό parser, πρέπει να υλοποιήσεις και το εσωτερικό περιβάλλον εκτέλεσης.
Ο χρόνος ανάπτυξης (μόνο για parsing/εκτέλεση) θα είναι πιστεύω της τάξης κάποιων μηνών.

Ποιά τα εργαλεία για την υλοποίηση της 2 επιλογής?

alkisg

Αν μιλάμε για τη ΓΛΩΣΣΑ, επειδή είναι αρκετά μικρή και απλή στο συντακτικό της, δε χρειάζεται κάποιο συγκεκριμένο εργαλείο, κάνει οποιαδήποτε σχεδόν γλώσσα προγραμματισμού. Με έναν recursive descent parser μερικών 100δων γραμμών έχει γίνει η συντακτική ανάλυση, και μένουν τα μηνύματα λαθών, η εκτέλεση (μερικές 1000δες γραμμές) και το interface (αρκετές 1000δες γραμμές).

Αν ρωτάς για κάτι πιο προχωρημένο (π.χ. αν θες να υλοποιήσεις τη C++) τότε προφανώς θα χρειαστείς κάποιο utility τύπου yacc ώστε να σου μεταφράσει τη γραμματική σε κώδικα ανάλυσης συντακτικού βασισμένο σε tables/states κτλ.

Αν θες λεπτομέρειες γράψε τι περίπου θες να υλοποιήσεις και σε τι γλώσσα σκέφτεσαι να το κάνεις, γιατί κάθε γλώσσα έχει τα δικά της εργαλεία.


Με την ευκαιρία, αν θελήσει ποτέ κανείς να μεταφέρει το Διερμηνευτή σε Linux, να μου πει να τον κάνω open source...

ΜΙΤΜ

Δεν με ενδιαφέρει να υλοποιήσω κάποια γλώσσα προγραμματισμού τύπου C, C++. Απλά και μόνο για λόγους εκπαιδευτικούς θέλω να καταλάβω πως υλοποιήθηκε η ΓΛΩΣΣΑ. Θα με ενδιέφερε να δημιουργήσω αρχικά εναν διερμηνευτη της γλώσσας. Η υλοποίηση μπορεί να γίνει είτε σε Visual C++ είτε Visual Basic (τι προτείνεις, υπάρχει τίποτα καλύτερο).

alkisg

Επειδή τώρα τρέχω με την επιμόρφωση των ΠΕ19-20, μόλις ξεμπερδέψω θα ποστάρω κάμποσο κώδικα από το Διερμηνευτή.
Θέλει λίγο καθάρισμα πριν τον ποστάρω (να φύγουν κάποια σχόλια / TODO κτλ), οπότε στη χειρότερη περίπτωση θα τα ανεβάσω στις διακοπές του Πάσχα.

Επειδή η ΓΛΩΣΣΑ είναι strickly typed, από αυτές τις δύο προτείνω Visual C++.
Μάλιστα αν έχεις σκοπό να φτιάξεις και interface, και δεν σε πειράζει να χρησιμοποιήσεις WxWidgets ή Qt αντί για MFC ή Windows Forms, μπορώ να σου δώσω όλον τον κώδικα του lexer/parser και της εκτέλεσης σε Delphi ώστε απλά να τον μετατρέψεις σε C++.

ΜΙΤΜ

Παράθεση από: alkisg στις 21 Μαρ 2008, 12:05:29 ΜΜ
Επειδή τώρα τρέχω με την επιμόρφωση των ΠΕ19-20, μόλις ξεμπερδέψω θα ποστάρω κάμποσο κώδικα από το Διερμηνευτή.
Θέλει λίγο καθάρισμα πριν τον ποστάρω (να φύγουν κάποια σχόλια / TODO κτλ), οπότε στη χειρότερη περίπτωση θα τα ανεβάσω στις διακοπές του Πάσχα.

Επειδή η ΓΛΩΣΣΑ είναι strickly typed, από αυτές τις δύο προτείνω Visual C++.
Μάλιστα αν έχεις σκοπό να φτιάξεις και interface, και δεν σε πειράζει να χρησιμοποιήσεις WxWidgets ή Qt αντί για MFC ή Windows Forms, μπορώ να σου δώσω όλον τον κώδικα του lexer/parser και της εκτέλεσης σε Delphi ώστε απλά να τον μετατρέψεις σε C++.

Ευχαριστώ. Θα περιμένω...

ΜΙΤΜ

Το UltraGram είναι πρόγραμμα για την υλοποίηση της συντακτικής αναλυσης?

alkisg

Ναι, αλλά για το απλό συντακτικό της ΓΛΩΣΣΑΣ πιο πολύ θα σε μπλέξει παρά θα σε βοηθήσει.
Άσε που θα φας αρκετό χρόνο μέχρι να σκεφτείς και να ορίσεις τα rules του parser, ενώ δε χρειάζεται...

ΜΙΤΜ

Θα χρησιμοποιούσα Visual Studio 2005 pro για την υλοποίηση του GUI. Το WxWidgets δεν το γνωρίζω πολύ καλά

alkisg

ΟΚ, αλλά με τι interface; MFC; WTL; Ή θα πας σε .NET και Windows Forms; Όλα αυτά περιλαμβάνονται στο Visual Studio...
Anyway, θα χρειαστείς κι έναν syntax editor, π.χ. http://www.scintilla.org ή αυτόν του Akelpad αν θες κάτι πιο ελαφρύ αλλά με λιγότερες δυνατότητες (richedit-based).

ΜΙΤΜ


Tony__Dim

#20
?

Foto

Ο Bill Gates ξεκίνησε με μια απλή Basic, διερμηνευτή, με πράξεις ακεραίων μόνο.

Παραδείγματα για διερμηνευτή με AST υπάρχουν εδώ  
https://rosettacode.org/wiki/Compiler/AST_interpreter
Η δομή AST βολεύει και για άμεση εκτέλεση.
Στο σύνδεσμο υπάρχουν υλοποιήσεις σε διάφορες γλώσσες. Δεν είναι τόσο τρομακτικό όπως τα περιγράφει ο Alkis, για κάτι απλό. Υποτίθεται ότι ο διερμηνευτής θα παίρνει ένα αρχείο εισόδου, το πρόγραμμα και θα το εκτελεί. Στις εντολές του προγράμματος θα υπάρχουν εντολές εξόδου όπως η Γράψε, για να έχουμε αποτελέσματα στη κονσόλα. Μέχρι εκεί η δυσκολία δεν είναι μεγάλη. 

Tony__Dim

#22
?

Foto

Λογικά τις σημειώσεις πρέπει να τις φιλτράρεις πριν την μετάφραση. Αυτό δεν είναι δύσκολο!

Foto

Είδα το βίντεο με τη GLP Python. Οι εντολές με το γράμμα ζ είναι εντελώς λάθος προσέγγιση!
Τα αλφαριθμητικά ξεχωρίζουν έτσι:
https://www.w3schools.com/python/python_strings.asp
Οι σημειώσεις ξεχωρίζουν έτσι:
https://www.w3schools.com/python/python_comments.asp
Άρα διατρέχεις όλο το κείμενο και αφήνεις τμήματα που είναι σημειώσεις ή αλφαριθμητικά. Στα ενδιάμεσα τμήματα που είναι οτιδήποτε άλλο, εκτός από σημειώσεις και αλφαριθμητικά, κάνεις τις αλλαγές που θες.
Δοκίμασε να φτιάξεις έναν τέτοιο αλγόριθμο. Δεν είναι δύσκολος!