Κατά τη σημασιολογική ανάλυση μας ενδιαφέρει εκτός από το είδος
ενός λεκτικού συμβόλου (μεταβλητή, ακέραιος, συμβολοσειρά) και η τιμή του
(count, 45, "hello").
Η τιμή είναι απαραίτητη για την υλοποίηση του συντακτικού δένδρου
και τη δημιουργία του κώδικα.
Το εργαλείο yacc συνδέει κανονικά με κάθε σύμβολο μια ακέραια τιμή.
Αν θέλουμε να συνδέσουμε άλλου είδους τιμή (π.χ. double) για κάθε σύμβολο
μπορούμε να το κάνουμε με τον ορισμό της σταθεράς YYSTYPE
στο τμήμα ορισμών της C στην αρχή του αρχείου:
Παράδειγμα:
%{
#define YYSTYPE double
%}
Ο λεκτικός αναλυτής (η συνάρτηση yylex()) πρέπει να θέτει κάθε φορά
την καθολική μεταβλητή yylval που ορίζεται στο αρχείο y.tab.h στη σωστή
τιμή (αν υπάρχει) για το αντίστοιχο σύμβολο.
Αν θέλουμε να ορίσουμε διαφορετικό τύπο τιμής για διαφορετικά σύμβολα
μπορούμε να το κάνουμε με τις δηλώσεις %union, %type και %token.
Στην περίπτωση αυτή η μεταβλητή yylval ορίζεται από το yacc ως ένωση
με πεδία αντίστοιχα με τα ονόματα των τύπων στην ένωση.
Ο λεκτικός αναλυτής στην περίπτωση αυτή πρέπει να θέτει το αντίστοιχο
πεδίο της ένωσης yylval (π.χ. yylval.i = atoi(yytext)).
Τελευταία αλλαγή: Παρασκευή, 7 Νοεμβρίου 2003 3:19 μμ
Εκτός αν αναφέρεται κάτι διαφορετικό, όλο το πρωτότυπο υλικό της σελίδας αυτής
του οποίου δημιουργός είναι ο Διομήδης Σπινέλλης παρέχεται σύμφωνα με τους
όρους της άδειας
«Creative Commons Attribution-Share Alike 3.0 Greece License».