Home | History | Annotate | Line # | Download | only in lint1
scan.l revision 1.132
      1 %{
      2 /* $NetBSD: scan.l,v 1.132 2021/03/21 08:46:26 rillig Exp $ */
      3 
      4 /*
      5  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
      6  * Copyright (c) 1994, 1995 Jochen Pohl
      7  * All Rights Reserved.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted provided that the following conditions
     11  * are met:
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  * 2. Redistributions in binary form must reproduce the above copyright
     15  *    notice, this list of conditions and the following disclaimer in the
     16  *    documentation and/or other materials provided with the distribution.
     17  * 3. All advertising materials mentioning features or use of this software
     18  *    must display the following acknowledgement:
     19  *      This product includes software developed by Jochen Pohl for
     20  *      The NetBSD Project.
     21  * 4. The name of the author may not be used to endorse or promote products
     22  *    derived from this software without specific prior written permission.
     23  *
     24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     25  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     26  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     27  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     29  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     33  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     34  */
     35 
     36 #include <sys/cdefs.h>
     37 #if defined(__RCSID) && !defined(lint)
     38 __RCSID("$NetBSD: scan.l,v 1.132 2021/03/21 08:46:26 rillig Exp $");
     39 #endif
     40 
     41 #include "lint1.h"
     42 #include "cgram.h"
     43 
     44 %}
     45 
     46 
     47 L	[_A-Za-z]
     48 D	[0-9]
     49 NZD	[1-9]
     50 BD	[0-1]
     51 OD	[0-7]
     52 HD	[0-9A-Fa-f]
     53 EX	([eE][+-]?[0-9]+)
     54 HX	(p[+-]?[0-9A-Fa-f]+)
     55 TL	([fFlL]?[i]?)
     56 
     57 %option nounput
     58 
     59 %%
     60 
     61 {L}({L}|{D})*			return lex_name(yytext, yyleng);
     62 0[bB]{BD}+[lLuU]*		return lex_integer_constant(yytext, yyleng, 2);
     63 0{OD}*[lLuU]*			return lex_integer_constant(yytext, yyleng, 8);
     64 {NZD}{D}*[lLuU]*		return lex_integer_constant(yytext, yyleng, 10);
     65 0[xX]{HD}+[lLuU]*		return lex_integer_constant(yytext, yyleng, 16);
     66 {D}+\.{D}*{EX}?{TL}		|
     67 {D}+{EX}{TL}			|
     68 0[xX]{HD}+\.{HD}*{HX}{TL}	|
     69 0[xX]{HD}+{HX}{TL}		|
     70 \.{D}+{EX}?{TL}			return lex_floating_constant(yytext, yyleng);
     71 "="				return T_ASSIGN;
     72 "*="				return lex_operator(T_OPASSIGN, MULASS);
     73 "/="				return lex_operator(T_OPASSIGN, DIVASS);
     74 "%="				return lex_operator(T_OPASSIGN, MODASS);
     75 "+="				return lex_operator(T_OPASSIGN, ADDASS);
     76 "-="				return lex_operator(T_OPASSIGN, SUBASS);
     77 "<<="				return lex_operator(T_OPASSIGN, SHLASS);
     78 ">>="				return lex_operator(T_OPASSIGN, SHRASS);
     79 "&="				return lex_operator(T_OPASSIGN, ANDASS);
     80 "^="				return lex_operator(T_OPASSIGN, XORASS);
     81 "|="				return lex_operator(T_OPASSIGN, ORASS);
     82 "||"				return T_LOGOR;
     83 "&&"				return T_LOGAND;
     84 "|"				return T_BITOR;
     85 "&"				return T_AMPER;
     86 "^"				return T_XOR;
     87 "=="				return lex_operator(T_EQUALITY, EQ);
     88 "!="				return lex_operator(T_EQUALITY, NE);
     89 "<"				return lex_operator(T_RELATIONAL, LT);
     90 ">"				return lex_operator(T_RELATIONAL, GT);
     91 "<="				return lex_operator(T_RELATIONAL, LE);
     92 ">="				return lex_operator(T_RELATIONAL, GE);
     93 "<<"				return lex_operator(T_SHIFT, SHL);
     94 ">>"				return lex_operator(T_SHIFT, SHR);
     95 "++"				return lex_operator(T_INCDEC, INC);
     96 "--"				return lex_operator(T_INCDEC, DEC);
     97 "->"				return lex_operator(T_MEMBACC, ARROW);
     98 "."				return lex_operator(T_MEMBACC, POINT);
     99 "+"				return lex_operator(T_ADDITIVE, PLUS);
    100 "-"				return lex_operator(T_ADDITIVE, MINUS);
    101 "*"				return T_ASTERISK;
    102 "/"				return lex_operator(T_MULTIPLICATIVE, DIV);
    103 "%"				return lex_operator(T_MULTIPLICATIVE, MOD);
    104 "!"				return lex_operator(T_UNARY, NOT);
    105 "~"				return lex_operator(T_UNARY, COMPL);
    106 "\""				return lex_string();
    107 "L\""				return lex_wide_string();
    108 ";"				return T_SEMI;
    109 "{"				return T_LBRACE;
    110 "}"				return T_RBRACE;
    111 ","				return T_COMMA;
    112 ":"				return T_COLON;
    113 "?"				return T_QUEST;
    114 "["				return T_LBRACK;
    115 "]"				return T_RBRACK;
    116 "("				return T_LPAREN;
    117 ")"				return T_RPAREN;
    118 "..."				return T_ELLIPSIS;
    119 "'"				return lex_character_constant();
    120 "L'"				return lex_wide_character_constant();
    121 ^#.*$				lex_directive(yytext);
    122 \n				lex_next_line();
    123 \t|" "|\f|\v			;
    124 "/*"				lex_comment();
    125 "//"				lex_slash_slash_comment();
    126 .				lex_unknown_character(yytext[0]);
    127 
    128 %%
    129 
    130 int
    131 lex_input(void)
    132 {
    133 	return input();
    134 }
    135