Απαντήσεις σε συχνές ερωτήσεις
- Χρειάζεται τελικά δεύτερη φάση δημιουργίας κώδικα για τις
μεταβλητές και τις συμβολοσειρές;
Όχι, α) ο κώδικας για τις μεταβλητές δημιουργείται εκτός των
εντολών αφού αυτές ορίζονται έξω από τις συναρτήσεις β) για
τις συμβολοσειρές υπάρχει μέθοδος δημιουργίας κώδικα που
δεν απαιτεί δεύτερο πέρασμα.
- Τι να κάνουμε με τα λάθη reduce/reduce του yacc.
Ψάξτε στο αρχείο y.output για να δείτε τους κανόνες που δημιουργούν
αυτά τα λάθη.
- Τι σημαίνει το λάθος X rules never reduced;
Κάποια τερματικά σύμβολα έχουν οριστεί σε κανόνες, αλλά δεν
έχουν χρησιμοποιηθεί σε κανέναν άλλο κανόνα.
Ψάξτε στο αρχείο y.output (στο τέλος του)
για να δείτε τα μη τερματικά σύμβολα που έχουν αυτό το πρόβλημα.
- Πως μπορούμε να βρούμε σφάλματα στο πρόγραμμά μας;
Με τον απασφαλματωτή gdb.
- Σε όλες τις μεταγλωττίσεις πρέπει να δώσετε το διακόπτη -g
(π.χ. cc -c -g gram.c ή cc -g -o comp comp.o gram.o)
- Για να τρέξετε το πρόγραμμα εκτελέστε την εντολή:
gdb name
και μετά την εντολή run.
Εντολές
- break
- καθορίζει σημεία που θέλετε να σταματήσετε.
π.χ. break main.c:22
- cont
- συνεχίζει την εκτέλεση μετά από break.
- step
- εκτελεί την επόμενη γραμμή κώδικα
- next
- εκτελεί την επόμενη γραμμή κώδικα χωρίς να μπαίνει μέσα
στις συναρτήσεις
- where
- μετά από ένα segmentation fauls σας λέει σε ποιο
σημείο έγινε.
- print expr
- τυπώνει την τιμή της έκφρασης expr
- help
- τυπώνει βοήθεια για τον gdb
- quit
- τερματίζει τη λειτουργία του gdb