Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- /****************************************************************************
- lexer.l
- ParserWizard generated Lex file.
- Author: .................................
- Date: 9 padziernika 2009
- ****************************************************************************/
- #include <stdio.h> /* printf() */
- #include <string.h> /* strcpy */
- #include <stdlib.h> /* atoi(), atof() */
- #include "common.h" /* MAX_STR_LEN */
- #ifdef PG
- #include "parser.h" /* deklaracja tokenów */
- #else
- #include "parser.tab.h" /* deklaracja tokenów */
- #endif
- /* wypisanie informacji o znalezionym tokenie */
- int process_token( char *TokenType, char *TokenVal, int TokenID );
- int comm_beg = 0; /* wiersz rozpoczęcia komentarza */
- %}
- /***************************************************************************/
- /* declarations section - place any declarations here */
- /***************************************************************************/
- /* deklaracja dodatkowych stanów skanera (nie deklarujemy domylnego stanu INITIAL */
- /* ..................... */
- /* pomocnicze wyrażenia regularne */
- alpha [a-zA-Z]
- num [0-9]
- alphanum [a-zA-Z0-9]
- alphanum2 [a-zA-Z0-9_]
- %%
- /***************************************************************************/
- /* rules section - place your Lex rules here */
- /***************************************************************************/
- /* eliminacja komentarzy wielowierszowych z wykorzystaniem mechanizmu stanów */
- /* ..................... */
- /* eliminacja komentarzy jednowierszowych z wykorzystaniem mechanizmu stanów */
- /* ..................... */
- /* wykrycie błędu: Nieoczekiwane zamknięcie komentarza w wierszu */
- /* ..................... */
- /* wykrywanie stałych tekstowych ".." z wykorzystaniem mechanizmu stanów */
- /* ..................... */
- /* wykrycie dyrektyw postaci #include <name.exe> oraz #include "name.exe" */
- /* z wykorzystaniem mechanizmu stanów */
- /* ..................... */
- /* wykrycie słów kluczowych */
- /* ..................... */
- "char " { return process_token("KW_CHAR", "", KW_CHAR);}
- "for " { return process_token("KW_FOR", "", KW_FOR);}
- "int " { return process_token("KW_INT", "", KW_INT);}
- "unsigned " { return process_token("KW_UNSIGNED", "", KW_UNSIGNED);}
- "double " { return process_token("KW_DOUBLE", "", KW_DOUBLE);}
- "void " { return process_token("KW_VOID", "", KW_VOID);}
- /* wykrycie tokenów opisywanych złożonymi wyrażeniami regularnymi */
- /* ..................... */
- [1-9]+[0-9]* {return process_token("INT_NUMBER", yytext, INT_NUMBER);}
- ({num}*[.]{num}+)|({num}+[.]{num}*) {return process_token("FLOAT_NUMBER", yytext, FLOAT_NUMBER);}
- \".*\" {return process_token("TEXT_CONST", yytext, TEXT_CONST);}
- \'.*\' {return process_token("CHAR", yytext, CHAR);}
- (alpha|[\_])alphanum2+ {return process_token("IDENT", yytext, IDENT);}
- /* wycięcie białych znaków */
- /* ..................... */
- [ \t\n] ;
- [\/\/].* ;
- [\*\/].*[\*\/] ;
- /* operatory wieloznakowe np.: ++ */
- /* ..................... */
- "++" { return process_token("INC", "", INC);}
- "<=" { return process_token("LE", "", LE);}
- /* operatory jednoznakowe oraz interpunkcja */
- /* ..................... */
- %%
- /***************************************************************************/
- /* programs section */
- /***************************************************************************/
- int process_token( char *TokenType, char *TokenVal, int TokenID )
- { /* wypisanie informacji o znalezionym tokenie:
- - TokenType - okrelenie typu tokena, np. "Literał"
- - TokenValue - wartoć tokena znakowo, np. "123"
- - TokenID - ID tokena zdefiniowane jako token w pliku parser.y lub kod ASCII dla tokenów jednoznakowych*/
- printf( "%-20.20s%-15s %s\n", yytext, TokenType, TokenVal );
- return( TokenID ); /* zwrócenie kodu tokena */
- }
- int yywrap( void )
- { /* funkcja wywoływana po napotkaniu końca strumienia wejciowego
- /* sprawdzenie, czy stan automatu YYSTATE różni się od stanu poczštkowego. Jeżeli tak,
- to oznacza to niezamknięty komentarz lub stałš tekstowš - wypisujemy informację o błędzie.*/
- /* ..................... */
- return( 1 ); /* koniecznie, by analiza nie rozpoczęła się od nowa */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement