D [0-9] L [a-zA-Z_] H [a-fA-F0-9] E [Ee][+-]?{D}+ FS (f|F|l|L) IS (u|U|l|L)* %{ /* * Copyright (C) 1995-1997 Christopher D. Granz * * This header may not be removed. * * Refer to the file "License" included in this package for further * information and before using any of the following. */ /* * (This lexer is based on an ANSI C lexer by Jeff Lee.) */ #include <stdio.h> #include "emc.h" #include "y.tab.h" void count( ); void comment( ); int iLineNum = 0; %} %% "/*" { count( ); comment( ); } "info" { count( ); return( INFO ); } "global" { count( ); return( GLOBAL ); } "returned" { count( ); return( RETURNED ); } "int" { count( ); return( INT ); } "float" { count( ); return( FLOAT ); } "string" { count( ); return( STRING ); } "object" { count( ); return( OBJECT ); } "array" { count( ); return( ARRAY ); } "if" { count( ); return( IF ); } "else" { count( ); return( ELSE ); } "do" { count( ); return( DO ); } "while" { count( ); return( WHILE ); } "for" { count( ); return( FOR ); } "broken" { count( ); return( BROKEN ); } "continued" { count( ); return( CONTINUED ); } "break" { count( ); return( BREAK ); } "continue" { count( ); return( CONTINUE ); } "return" { count( ); return( RETURN ); } {L}({L}|{D})* { count( ); return( IDENTIFIER ); } 0[xX]{H}+{IS}? { count( ); return( INT_CONSTANT ); } 0{D}+{IS}? { count( ); return( INT_CONSTANT ); } {D}+{IS}? { count( ); return( INT_CONSTANT ); } '(\\.|[^\\'])+' { count( ); return( INT_CONSTANT ); } {D}+{E}{FS}? { count( ); return( FLOAT_CONSTANT ); } {D}*"."{D}+({E})?{FS}? { count( ); return( FLOAT_CONSTANT ); } {D}+"."{D}*({E})?{FS}? { count( ); return( FLOAT_CONSTANT ); } \"(\\.|[^\\"])*\" { count( ); return( STRING_LITERAL ); } "*=" { count( ); return( MUL_ASSIGN ); } "/=" { count( ); return( DIV_ASSIGN ); } "%=" { count( ); return( MOD_ASSIGN ); } "+=" { count( ); return( ADD_ASSIGN ); } "-=" { count( ); return( SUB_ASSIGN ); } ">>=" { count( ); return( LEFT_ASSIGN ); } "<<=" { count( ); return( RIGHT_ASSIGN ); } "&=" { count( ); return( AND_ASSIGN ); } "^=" { count( ); return( XOR_ASSIGN ); } "|=" { count( ); return( OR_ASSIGN ); } "++" { count( ); return( INC_OP ); } "--" { count( ); return( DEC_OP ); } ">>" { count( ); return( LEFT_OP ); } "<<" { count( ); return( RIGHT_OP ); } "&&" { count( ); return( AND_OP ); } "||" { count( ); return( OR_OP ); } "<=" { count( ); return( LE_OP ); } ">=" { count( ); return( GE_OP ); } "==" { count( ); return( EQ_OP ); } "!=" { count( ); return( NE_OP ); } "{" { count( ); return( '{' ); } "}" { count( ); return( '}' ); } "(" { count( ); return( '(' ); } ")" { count( ); return( ')' ); } "[" { count( ); return( '[' ); } "]" { count( ); return( ']' ); } ";" { count( ); return( ';' ); } "," { count( ); return( ',' ); } "@" { count( ); return( '@' ); } ":" { count( ); return( ':' ); } "?" { count( ); return( '?' ); } "=" { count( ); return( '=' ); } "&" { count( ); return( '&' ); } "!" { count( ); return( '!' ); } "~" { count( ); return( '~' ); } "-" { count( ); return( '-' ); } "+" { count( ); return( '+' ); } "*" { count( ); return( '*' ); } "/" { count( ); return( '/' ); } "%" { count( ); return( '%' ); } "<" { count( ); return( '<' ); } ">" { count( ); return( '>' ); } "^" { count( ); return( '^' ); } "|" { count( ); return( '|' ); } "\n" { count( ); iLineNum++; } [ \t\v\r\f] { count( ); /* Skip whitespace. */ } . { /* We don't like bad characters :) */ } %% int yywrap( void ) { return( 1 ); } void comment( void ) { char c, c1; for ( ; ; ) { while ( ( c = input( ) ) != '*' && c != 0 ); if ( ( c1 = input( ) ) != '/' && c != 0 ) unput( c1 ); else break; } } int column = 0; void count( void ) { int i; for ( i = 0; yytext[i] != '\0'; i++ ) { if ( yytext[i] == '\n' ) column = 0; else if ( yytext[i] == '\t' ) column += ( 8 - ( column % 8 ) ); else column++; } fprintf( stderr, "%s", yytext ); } /* * End of em.l */