Ανάπτυξη με γλώσσες εξειδικευμένου πεδίου

Σύζευξη γνωστικού πεδίου - λογισμικού

Απαιτήσεις διαλεκτικής επαΐοντα

Αξιοποίηση γνωστικών δεξιοτήτων
Υποστήριξη φορμαλισμών του γνωστικού πεδίου
Δημοσίευση
Διάχυση, εκπαίδευση, ανασκόπηση
Ανασκόπηση από ομότιμους επαΐοντες
Αρχειοθέτηση
Σε μορφή κατάλληλη για ανιχνευσιμότητα
Επιλεκτική επέμβαση
Βελτίωση, συντήρηση, υποστήριξη
Επαναχρησιμοποίηση

Προβλήματα των γλωσσών γενικής χρήσης

Δύσκολες στην εκμάθηση
C++ 1997 910 σ.
Απαιτούν μεγάλες βιβλιοθήκες υποστήριξης
Windows API 3433 συναρτήσεις
Ακατάλληλες για συγκεκριμένες εφαρμογές
Συστήματα πελάτη εξυπηρετητή
Απόσταση από το φορμαλισμό του επαΐοντα

Γλώσσες εξειδικευμένου πεδίου (ΓΕΠ)

Παράδειγμα ΓΕΠ στην υλοποίηση μεταγλωττιστών

Παράδειγμα: κώδικας 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;
                }
;