Ασκήσεις

  1. Να υλοποιήσετε σε C έναν λεκτικό αναλυτή που να αναγνωρίζει τα παρακάτω λεκτικά σύμβολα: Η συνάρτηση του λεκτικού αναλυτή θα λέγεται yylex και θα επιστρέφει: των κωδικό του χαρακτήρα για τους τελεστές, 256 για τους ακέραιους, 257 για τις μεταβλητές και -1 στο τέλος του αρχείου. Ακόμα θα φυλάει στα πεδία της ένωσης yylval s και i τις τιμές των μεταβλητών και των ακεραίων αντίστοιχα. Σε περίπτωση λάθους ο λεκτικός αναλυτής θα τερματίζει τη λειτουργία του εμφανίζοντας ένα μήνυμα λάθους. Ο λεκτικός αναλυτής θα καλείται από το παρακάτω πρόγραμμα:
    #include <stdio.h>

    union {
            char *s;                /* Variable name */
            int i;                  /* Integer value */
    } yylval;

    int yylex();

    main()
    {
            int k;

            while ((k = yylex()) != -1) {
                    switch (k) {
                    case 256:
                            printf("INT: %d\n", yylval.i);
                            break;
                    case 257:
                            printf("VAR: %s\n", yylval.s);
                            break;
                    default:
                            printf("OPERATOR: %c\n", k);
                            break;
                    }
            }
    }