xref: /freebsd/sys/contrib/dev/acpica/compiler/prparser.l (revision fe0f0bbb19f4f267df5c6249d1af4d6f665dfd52)
14c52cad2SJung-uk Kim %{
24c52cad2SJung-uk Kim /******************************************************************************
34c52cad2SJung-uk Kim  *
44c52cad2SJung-uk Kim  * Module Name: prparser.l - Flex input file for preprocessor lexer
54c52cad2SJung-uk Kim  *
64c52cad2SJung-uk Kim  *****************************************************************************/
74c52cad2SJung-uk Kim 
84c52cad2SJung-uk Kim /*
91c0e1b6dSJung-uk Kim  * Copyright (C) 2000 - 2015, Intel Corp.
104c52cad2SJung-uk Kim  * All rights reserved.
114c52cad2SJung-uk Kim  *
124c52cad2SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
134c52cad2SJung-uk Kim  * modification, are permitted provided that the following conditions
144c52cad2SJung-uk Kim  * are met:
154c52cad2SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
164c52cad2SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
174c52cad2SJung-uk Kim  *    without modification.
184c52cad2SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
194c52cad2SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
204c52cad2SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
214c52cad2SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
224c52cad2SJung-uk Kim  *    binary redistribution.
234c52cad2SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
244c52cad2SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
254c52cad2SJung-uk Kim  *    from this software without specific prior written permission.
264c52cad2SJung-uk Kim  *
274c52cad2SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
284c52cad2SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
294c52cad2SJung-uk Kim  * Software Foundation.
304c52cad2SJung-uk Kim  *
314c52cad2SJung-uk Kim  * NO WARRANTY
324c52cad2SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
334c52cad2SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
344c52cad2SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
354c52cad2SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
364c52cad2SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
374c52cad2SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
384c52cad2SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
394c52cad2SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
404c52cad2SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
414c52cad2SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
424c52cad2SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
434c52cad2SJung-uk Kim  */
444c52cad2SJung-uk Kim 
454c52cad2SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
464c52cad2SJung-uk Kim #include "prparser.y.h"
474c52cad2SJung-uk Kim 
484c52cad2SJung-uk Kim /* Buffer to pass strings to the parser */
494c52cad2SJung-uk Kim 
504c52cad2SJung-uk Kim #define STRING_SETUP    strcpy (StringBuffer, PrParsertext);\
514c52cad2SJung-uk Kim     PrParserlval.str = StringBuffer
524c52cad2SJung-uk Kim 
534c52cad2SJung-uk Kim #define _COMPONENT          ACPI_COMPILER
544c52cad2SJung-uk Kim         ACPI_MODULE_NAME    ("prscanner")
55*fe0f0bbbSJung-uk Kim 
56*fe0f0bbbSJung-uk Kim 
57*fe0f0bbbSJung-uk Kim /* Local prototypes */
58*fe0f0bbbSJung-uk Kim 
59*fe0f0bbbSJung-uk Kim static char
60*fe0f0bbbSJung-uk Kim PrDoCommentType1 (
61*fe0f0bbbSJung-uk Kim     void);
62*fe0f0bbbSJung-uk Kim 
63*fe0f0bbbSJung-uk Kim static char
64*fe0f0bbbSJung-uk Kim PrDoCommentType2 (
65*fe0f0bbbSJung-uk Kim     void);
664c52cad2SJung-uk Kim %}
674c52cad2SJung-uk Kim 
684c52cad2SJung-uk Kim %option noyywrap
694c52cad2SJung-uk Kim 
704c52cad2SJung-uk Kim Number          [0-9a-fA-F]+
714c52cad2SJung-uk Kim HexNumber       0[xX][0-9a-fA-F]+
724c52cad2SJung-uk Kim WhiteSpace      [ \t\v\r]+
734c52cad2SJung-uk Kim NewLine         [\n]
744c52cad2SJung-uk Kim Identifier      [a-zA-Z][0-9a-zA-Z]*
754c52cad2SJung-uk Kim 
764c52cad2SJung-uk Kim %%
77*fe0f0bbbSJung-uk Kim "/*"            { if (!PrDoCommentType1 ()) {yyterminate ();} }
78*fe0f0bbbSJung-uk Kim "//"            { if (!PrDoCommentType2 ()) {yyterminate ();} }
794c52cad2SJung-uk Kim 
804c52cad2SJung-uk Kim \(              return (EXPOP_PAREN_OPEN);
814c52cad2SJung-uk Kim \)              return (EXPOP_PAREN_CLOSE);
824c52cad2SJung-uk Kim \~              return (EXPOP_ONES_COMPLIMENT);
834c52cad2SJung-uk Kim \!              return (EXPOP_LOGICAL_NOT);
844c52cad2SJung-uk Kim \*              return (EXPOP_MULTIPLY);
854c52cad2SJung-uk Kim \/              return (EXPOP_DIVIDE);
864c52cad2SJung-uk Kim \%              return (EXPOP_MODULO);
874c52cad2SJung-uk Kim \+              return (EXPOP_ADD);
884c52cad2SJung-uk Kim \-              return (EXPOP_SUBTRACT);
894c52cad2SJung-uk Kim ">>"            return (EXPOP_SHIFT_RIGHT);
904c52cad2SJung-uk Kim "<<"            return (EXPOP_SHIFT_LEFT);
914c52cad2SJung-uk Kim \<              return (EXPOP_LESS);
924c52cad2SJung-uk Kim \>              return (EXPOP_GREATER);
934c52cad2SJung-uk Kim "<="            return (EXPOP_LESS_EQUAL);
944c52cad2SJung-uk Kim ">="            return (EXPOP_GREATER_EQUAL);
954c52cad2SJung-uk Kim "=="            return (EXPOP_EQUAL);
964c52cad2SJung-uk Kim "!="            return (EXPOP_NOT_EQUAL);
974c52cad2SJung-uk Kim \&              return (EXPOP_AND);
984c52cad2SJung-uk Kim \^              return (EXPOP_XOR);
994c52cad2SJung-uk Kim \|              return (EXPOP_OR);
1004c52cad2SJung-uk Kim "&&"            return (EXPOP_LOGICAL_AND);
1014c52cad2SJung-uk Kim "||"            return (EXPOP_LOGICAL_OR);
1024c52cad2SJung-uk Kim 
1034c52cad2SJung-uk Kim "defined"       return (EXPOP_DEFINE);
1044c52cad2SJung-uk Kim {Identifier}    {STRING_SETUP; return (EXPOP_IDENTIFIER);}
1054c52cad2SJung-uk Kim 
1064c52cad2SJung-uk Kim <<EOF>>         return (EXPOP_EOF); /* null end-of-string */
1074c52cad2SJung-uk Kim 
1084c52cad2SJung-uk Kim {Number}        return (EXPOP_NUMBER);
1094c52cad2SJung-uk Kim {HexNumber}     return (EXPOP_HEX_NUMBER);
1104c52cad2SJung-uk Kim {NewLine}       return (EXPOP_NEW_LINE);
1114c52cad2SJung-uk Kim {WhiteSpace}    /* Ignore */
1124c52cad2SJung-uk Kim 
1134c52cad2SJung-uk Kim .               return (EXPOP_EOF);
1144c52cad2SJung-uk Kim %%
1154c52cad2SJung-uk Kim 
1164c52cad2SJung-uk Kim /*
1174c52cad2SJung-uk Kim  * Local support functions
1184c52cad2SJung-uk Kim  */
1194c52cad2SJung-uk Kim YY_BUFFER_STATE         LexBuffer;
1204c52cad2SJung-uk Kim 
1214c52cad2SJung-uk Kim 
1224c52cad2SJung-uk Kim /******************************************************************************
1234c52cad2SJung-uk Kim  *
1244c52cad2SJung-uk Kim  * FUNCTION:    PrInitLexer
1254c52cad2SJung-uk Kim  *
1264c52cad2SJung-uk Kim  * PARAMETERS:  String              - Input string to be parsed
1274c52cad2SJung-uk Kim  *
1284c52cad2SJung-uk Kim  * RETURN:      TRUE if parser returns NULL. FALSE otherwise.
1294c52cad2SJung-uk Kim  *
1304c52cad2SJung-uk Kim  * DESCRIPTION: Initialization routine for lexer. The lexer needs
1314c52cad2SJung-uk Kim  *              a buffer to handle strings instead of a file.
1324c52cad2SJung-uk Kim  *
1334c52cad2SJung-uk Kim  *****************************************************************************/
1344c52cad2SJung-uk Kim 
1354c52cad2SJung-uk Kim int
1364c52cad2SJung-uk Kim PrInitLexer (
1374c52cad2SJung-uk Kim     char                    *String)
1384c52cad2SJung-uk Kim {
1394c52cad2SJung-uk Kim 
1404c52cad2SJung-uk Kim     LexBuffer = yy_scan_string (String);
1414c52cad2SJung-uk Kim     return (LexBuffer == NULL);
1424c52cad2SJung-uk Kim }
1434c52cad2SJung-uk Kim 
1444c52cad2SJung-uk Kim 
1454c52cad2SJung-uk Kim /******************************************************************************
1464c52cad2SJung-uk Kim  *
1474c52cad2SJung-uk Kim  * FUNCTION:    PrTerminateLexer
1484c52cad2SJung-uk Kim  *
1494c52cad2SJung-uk Kim  * PARAMETERS:  None
1504c52cad2SJung-uk Kim  *
1514c52cad2SJung-uk Kim  * RETURN:      None
1524c52cad2SJung-uk Kim  *
1534c52cad2SJung-uk Kim  * DESCRIPTION: Termination routine for thelexer.
1544c52cad2SJung-uk Kim  *
1554c52cad2SJung-uk Kim  *****************************************************************************/
1564c52cad2SJung-uk Kim 
1574c52cad2SJung-uk Kim void
1584c52cad2SJung-uk Kim PrTerminateLexer (
1594c52cad2SJung-uk Kim     void)
1604c52cad2SJung-uk Kim {
1614c52cad2SJung-uk Kim 
1624c52cad2SJung-uk Kim     yy_delete_buffer (LexBuffer);
1634c52cad2SJung-uk Kim }
164*fe0f0bbbSJung-uk Kim 
165*fe0f0bbbSJung-uk Kim 
166*fe0f0bbbSJung-uk Kim /********************************************************************************
167*fe0f0bbbSJung-uk Kim  *
168*fe0f0bbbSJung-uk Kim  * FUNCTION:    PrDoCommentType1
169*fe0f0bbbSJung-uk Kim  *
170*fe0f0bbbSJung-uk Kim  * PARAMETERS:  none
171*fe0f0bbbSJung-uk Kim  *
172*fe0f0bbbSJung-uk Kim  * RETURN:      none
173*fe0f0bbbSJung-uk Kim  *
174*fe0f0bbbSJung-uk Kim  * DESCRIPTION: Process a new legacy comment. Just toss it.
175*fe0f0bbbSJung-uk Kim  *
176*fe0f0bbbSJung-uk Kim  ******************************************************************************/
177*fe0f0bbbSJung-uk Kim 
178*fe0f0bbbSJung-uk Kim static char
179*fe0f0bbbSJung-uk Kim PrDoCommentType1 (
180*fe0f0bbbSJung-uk Kim     void)
181*fe0f0bbbSJung-uk Kim {
182*fe0f0bbbSJung-uk Kim     int                 c;
183*fe0f0bbbSJung-uk Kim 
184*fe0f0bbbSJung-uk Kim 
185*fe0f0bbbSJung-uk Kim Loop:
186*fe0f0bbbSJung-uk Kim     while (((c = input ()) != '*') && (c != EOF))
187*fe0f0bbbSJung-uk Kim     {
188*fe0f0bbbSJung-uk Kim     }
189*fe0f0bbbSJung-uk Kim     if (c == EOF)
190*fe0f0bbbSJung-uk Kim     {
191*fe0f0bbbSJung-uk Kim         return (FALSE);
192*fe0f0bbbSJung-uk Kim     }
193*fe0f0bbbSJung-uk Kim 
194*fe0f0bbbSJung-uk Kim     if (((c = input ()) != '/') && (c != EOF))
195*fe0f0bbbSJung-uk Kim     {
196*fe0f0bbbSJung-uk Kim         unput (c);
197*fe0f0bbbSJung-uk Kim         goto Loop;
198*fe0f0bbbSJung-uk Kim     }
199*fe0f0bbbSJung-uk Kim     if (c == EOF)
200*fe0f0bbbSJung-uk Kim     {
201*fe0f0bbbSJung-uk Kim         return (FALSE);
202*fe0f0bbbSJung-uk Kim     }
203*fe0f0bbbSJung-uk Kim 
204*fe0f0bbbSJung-uk Kim     return (TRUE);
205*fe0f0bbbSJung-uk Kim }
206*fe0f0bbbSJung-uk Kim 
207*fe0f0bbbSJung-uk Kim 
208*fe0f0bbbSJung-uk Kim /********************************************************************************
209*fe0f0bbbSJung-uk Kim  *
210*fe0f0bbbSJung-uk Kim  * FUNCTION:    PrDoCommentType2
211*fe0f0bbbSJung-uk Kim  *
212*fe0f0bbbSJung-uk Kim  * PARAMETERS:  none
213*fe0f0bbbSJung-uk Kim  *
214*fe0f0bbbSJung-uk Kim  * RETURN:      none
215*fe0f0bbbSJung-uk Kim  *
216*fe0f0bbbSJung-uk Kim  * DESCRIPTION: Process a new "//" comment. Just toss it.
217*fe0f0bbbSJung-uk Kim  *
218*fe0f0bbbSJung-uk Kim  ******************************************************************************/
219*fe0f0bbbSJung-uk Kim 
220*fe0f0bbbSJung-uk Kim static char
221*fe0f0bbbSJung-uk Kim PrDoCommentType2 (
222*fe0f0bbbSJung-uk Kim     void)
223*fe0f0bbbSJung-uk Kim {
224*fe0f0bbbSJung-uk Kim     int                 c;
225*fe0f0bbbSJung-uk Kim 
226*fe0f0bbbSJung-uk Kim 
227*fe0f0bbbSJung-uk Kim     while (((c = input ()) != '\n') && (c != EOF))
228*fe0f0bbbSJung-uk Kim     {
229*fe0f0bbbSJung-uk Kim     }
230*fe0f0bbbSJung-uk Kim     if (c == EOF)
231*fe0f0bbbSJung-uk Kim     {
232*fe0f0bbbSJung-uk Kim         return (FALSE);
233*fe0f0bbbSJung-uk Kim     }
234*fe0f0bbbSJung-uk Kim 
235*fe0f0bbbSJung-uk Kim     return (TRUE);
236*fe0f0bbbSJung-uk Kim }
237