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