Η λειτουργία του yacc βασίζεται σε ένα ΝΠΑ στοίβας.
Κατά τη λειτοyργία του o yacc διαβάζει σύμβολα και τα προσθέτει τη
στοίβα.
Η λειτουργία αυτή καλείται πράξη ολίσθησης (shift action).
Κατά την ανάγνωση των λεκτικών συμβόλων o yacc κρατάει ένα
σύμβολο προεξέτασης (lookahead token)
εκτός της στοίβας για να μπορεί να διαλέξει ανάμεσα σε
ισοδύναμους κανόνες της γραμματικής.
(Οι γραμματικές που αναγνωρίζει ο yacc μπορούν να αναγνωριστούν με τη
χρήση ενός μόνο συμβόλου προεξέτασης).
Όταν κάποια σύμβολα στη στοίβα ταιριάζουν με το δεξί τμήμα
ενός κανόνα ο yacc αντικαθιστά τα σύμβολα αυτά από το αριστερό σύμβολο
στον κανόνα.
Η λειτουργία αυτή καλείται πράξη ελάττωσης (reduce action).
Για την επιλογή ανάμεσα σε πολλούς υποψήφιους κανόνες o yacc
χρησιμοποιεί το σύμβολο προεξέτασης.
Υπάρχει περίπτωση για έναν κανόνα να ταιριάζει ολίσθηση και ελάττωση:
if_stmt : IF expr THEN stmt
| IF expr THEN stmt ELSE stmt
;
Σε τέτοιες περιπτώσεις ο yacc προτιμά την ελάττωση και εμφανίζει ένα
διαγνωστικό μήνυμα.
Το παρακάτω απόσπασμα από το αρχείο y.output απεικονίζει μια κατάσταση,
τους κανόνες που είναι υποψήφιοι για αναγνώριση (τι βρίσκεται στη στοίβα),
και τις ενέργειες ανάλογα με το σύμβολο που θα διαβαστεί:
Τελευταία αλλαγή: Παρασκευή, 7 Νοεμβρίου 2003 3:20 μμ
Εκτός αν αναφέρεται κάτι διαφορετικό, όλο το πρωτότυπο υλικό της σελίδας αυτής
του οποίου δημιουργός είναι ο Διομήδης Σπινέλλης παρέχεται σύμφωνα με τους
όρους της άδειας
«Creative Commons Attribution-Share Alike 3.0 Greece License».