Ανάπτυξη με γλώσσες εξειδικευμένου πεδίου
Σύζευξη γνωστικού πεδίου - λογισμικού
- Απαιτήσεις γνώσης του πεδίου κατά:
- το σχεδιασμό
- την υλοποίηση
- την επαλήθευση
- Ελλείψεις ή προβλήματα επικοινωνίας οδηγούν σε αστοχίες
- Η γλώσσα εξειδικευμένου πεδίου:
- χρησιμοποιεί το φορμαλισμό του πεδίου
- γεφυρώνει την επικοινωνία μεταξύ του επαΐοντα και της ομάδας υλοποίησης
Απαιτήσεις διαλεκτικής επαΐοντα
- Αξιοποίηση γνωστικών δεξιοτήτων
- Υποστήριξη φορμαλισμών του γνωστικού πεδίου
- Δημοσίευση
- Διάχυση, εκπαίδευση, ανασκόπηση
- Ανασκόπηση από ομότιμους επαΐοντες
- Αρχειοθέτηση
- Σε μορφή κατάλληλη για ανιχνευσιμότητα
- Επιλεκτική επέμβαση
- Βελτίωση, συντήρηση, υποστήριξη
- Επαναχρησιμοποίηση
Προβλήματα των γλωσσών γενικής χρήσης
- Δύσκολες στην εκμάθηση
- C++ 1997 910 σ.
- Απαιτούν μεγάλες βιβλιοθήκες υποστήριξης
- Windows API 3433 συναρτήσεις
- Ακατάλληλες για συγκεκριμένες εφαρμογές
- Συστήματα πελάτη εξυπηρετητή
- Απόσταση από το φορμαλισμό του επαΐοντα
Γλώσσες εξειδικευμένου πεδίου (ΓΕΠ)
- Γλώσσες προγραμματισμού προσαρμοσμένες σε συγκεκριμένο πεδίο
- Παραδείγματα
- Lex/yacc
- HTML
- VHDL
- Γλώσσες τέταρτης γενιάς
- Ευσύνοπτη περιγραφή της λογικής της εφαρμογής
- Ελάττωση της σημασιολογικής απόστασης ανάμεσα στο πρόβλημα και το πρόγραμμα
Παράδειγμα ΓΕΠ στην υλοποίηση μεταγλωττιστών
- Lex - δημιουργεί κώδικα λεκτικής ανάλυσης
- Yacc - δημιουργεί κώδικα συντακτικής ανάλυσης
Παράδειγμα: κώδικας yacc:
unary_expression
: postfix_expression
| '+' cast_expression { $$ = $2; }
| '-' cast_expression { $$ = -$2; }
| '~' cast_expression { $$ = ~$2; }
| '!' cast_expression { $$ = !$2; }
;
cast_expression
: unary_expression
;
multiplicative_expression
: cast_expression
| multiplicative_expression '*' cast_expression { $$ = $1 * $3; }
| multiplicative_expression '/' cast_expression
{
if ($3 == 0) {
Error::error(E_ERR, "division by zero in #if expression");
$$ = 0;
} else
$$ = $1 / $3;
}
| multiplicative_expression '%' cast_expression
{
if ($3 == 0) {
Error::error(E_ERR, "modulo division by zero in #if expression");
$$ = $1;
} else
$$ = $1 / $3;
}
;