Blame source/compiler/prparser.l

Packit Service 1fb00e
%{
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Module Name: prparser.l - Flex input file for preprocessor lexer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Copyright (C) 2000 - 2018, Intel Corp.
Packit Service 1fb00e
 * All rights reserved.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Redistribution and use in source and binary forms, with or without
Packit Service 1fb00e
 * modification, are permitted provided that the following conditions
Packit Service 1fb00e
 * are met:
Packit Service 1fb00e
 * 1. Redistributions of source code must retain the above copyright
Packit Service 1fb00e
 *    notice, this list of conditions, and the following disclaimer,
Packit Service 1fb00e
 *    without modification.
Packit Service 1fb00e
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
Packit Service 1fb00e
 *    substantially similar to the "NO WARRANTY" disclaimer below
Packit Service 1fb00e
 *    ("Disclaimer") and any redistribution must be conditioned upon
Packit Service 1fb00e
 *    including a substantially similar Disclaimer requirement for further
Packit Service 1fb00e
 *    binary redistribution.
Packit Service 1fb00e
 * 3. Neither the names of the above-listed copyright holders nor the names
Packit Service 1fb00e
 *    of any contributors may be used to endorse or promote products derived
Packit Service 1fb00e
 *    from this software without specific prior written permission.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Alternatively, this software may be distributed under the terms of the
Packit Service 1fb00e
 * GNU General Public License ("GPL") version 2 as published by the Free
Packit Service 1fb00e
 * Software Foundation.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * NO WARRANTY
Packit Service 1fb00e
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 1fb00e
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 1fb00e
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
Packit Service 1fb00e
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 1fb00e
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 1fb00e
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 1fb00e
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 1fb00e
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Packit Service 1fb00e
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
Packit Service 1fb00e
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Packit Service 1fb00e
 * POSSIBILITY OF SUCH DAMAGES.
Packit Service 1fb00e
 */
Packit Service 1fb00e
Packit Service 1fb00e
#include "aslcompiler.h"
Packit Service 1fb00e
#include "prparser.y.h"
Packit Service 1fb00e
Packit Service 1fb00e
/* Buffer to pass strings to the parser */
Packit Service 1fb00e
Packit Service 1fb00e
#define STRING_SETUP    strcpy (StringBuffer, PrParsertext);\
Packit Service 1fb00e
    PrParserlval.str = StringBuffer
Packit Service 1fb00e
Packit Service 1fb00e
#define _COMPONENT          ACPI_COMPILER
Packit Service 1fb00e
        ACPI_MODULE_NAME    ("prscanner")
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/* Local prototypes */
Packit Service 1fb00e
Packit Service 1fb00e
static char
Packit Service 1fb00e
PrDoCommentType1 (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
static char
Packit Service 1fb00e
PrDoCommentType2 (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
%}
Packit Service 1fb00e
Packit Service 1fb00e
%option noyywrap
Packit Service 1fb00e
Packit Service 1fb00e
Number          [0-9a-fA-F]+
Packit Service 1fb00e
HexNumber       0[xX][0-9a-fA-F]+
Packit Service 1fb00e
WhiteSpace      [ \t\v\r]+
Packit Service 1fb00e
NewLine         [\n]
Packit Service 1fb00e
Identifier      [a-zA-Z][0-9a-zA-Z]*
Packit Service 1fb00e
Packit Service 1fb00e
%%
Packit Service 1fb00e
"/*"            { if (!PrDoCommentType1 ()) {yyterminate ();} }
Packit Service 1fb00e
"//"            { if (!PrDoCommentType2 ()) {yyterminate ();} }
Packit Service 1fb00e
Packit Service 1fb00e
\(              return (EXPOP_PAREN_OPEN);
Packit Service 1fb00e
\)              return (EXPOP_PAREN_CLOSE);
Packit Service 1fb00e
\~              return (EXPOP_ONES_COMPLIMENT);
Packit Service 1fb00e
\!              return (EXPOP_LOGICAL_NOT);
Packit Service 1fb00e
\*              return (EXPOP_MULTIPLY);
Packit Service 1fb00e
\/              return (EXPOP_DIVIDE);
Packit Service 1fb00e
\%              return (EXPOP_MODULO);
Packit Service 1fb00e
\+              return (EXPOP_ADD);
Packit Service 1fb00e
\-              return (EXPOP_SUBTRACT);
Packit Service 1fb00e
">>"            return (EXPOP_SHIFT_RIGHT);
Packit Service 1fb00e
"<<"            return (EXPOP_SHIFT_LEFT);
Packit Service 1fb00e
\<              return (EXPOP_LESS);
Packit Service 1fb00e
\>              return (EXPOP_GREATER);
Packit Service 1fb00e
"<="            return (EXPOP_LESS_EQUAL);
Packit Service 1fb00e
">="            return (EXPOP_GREATER_EQUAL);
Packit Service 1fb00e
"=="            return (EXPOP_EQUAL);
Packit Service 1fb00e
"!="            return (EXPOP_NOT_EQUAL);
Packit Service 1fb00e
\&              return (EXPOP_AND);
Packit Service 1fb00e
\^              return (EXPOP_XOR);
Packit Service 1fb00e
\|              return (EXPOP_OR);
Packit Service 1fb00e
"&&"            return (EXPOP_LOGICAL_AND);
Packit Service 1fb00e
"||"            return (EXPOP_LOGICAL_OR);
Packit Service 1fb00e
Packit Service 1fb00e
"defined"       return (EXPOP_DEFINE);
Packit Service 1fb00e
{Identifier}    {STRING_SETUP; return (EXPOP_IDENTIFIER);}
Packit Service 1fb00e
Packit Service 1fb00e
<<EOF>>         return (EXPOP_EOF); /* null end-of-string */
Packit Service 1fb00e
Packit Service 1fb00e
{Number}        return (EXPOP_NUMBER);
Packit Service 1fb00e
{HexNumber}     return (EXPOP_HEX_NUMBER);
Packit Service 1fb00e
{NewLine}       return (EXPOP_NEW_LINE);
Packit Service 1fb00e
{WhiteSpace}    /* Ignore */
Packit Service 1fb00e
Packit Service 1fb00e
.               return (EXPOP_EOF);
Packit Service 1fb00e
%%
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Local support functions
Packit Service 1fb00e
 */
Packit Service 1fb00e
YY_BUFFER_STATE         LexBuffer;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    PrInitLexer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  String              - Input string to be parsed
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      TRUE if parser returns NULL. FALSE otherwise.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Initialization routine for lexer. The lexer needs
Packit Service 1fb00e
 *              a buffer to handle strings instead of a file.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
int
Packit Service 1fb00e
PrInitLexer (
Packit Service 1fb00e
    char                    *String)
Packit Service 1fb00e
{
Packit Service 1fb00e
Packit Service 1fb00e
    LexBuffer = yy_scan_string (String);
Packit Service 1fb00e
    return (LexBuffer == NULL);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    PrTerminateLexer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Termination routine for thelexer.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrTerminateLexer (
Packit Service 1fb00e
    void)
Packit Service 1fb00e
{
Packit Service 1fb00e
Packit Service 1fb00e
    yy_delete_buffer (LexBuffer);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/********************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    PrDoCommentType1
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  none
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      none
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Process a new legacy comment. Just toss it.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
static char
Packit Service 1fb00e
PrDoCommentType1 (
Packit Service 1fb00e
    void)
Packit Service 1fb00e
{
Packit Service 1fb00e
    int                 c;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
Loop:
Packit Service 1fb00e
    while (((c = input ()) != '*') && (c != EOF))
Packit Service 1fb00e
    {
Packit Service 1fb00e
    }
Packit Service 1fb00e
    if (c == EOF)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (FALSE);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    if (((c = input ()) != '/') && (c != EOF))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        unput (c);
Packit Service 1fb00e
        goto Loop;
Packit Service 1fb00e
    }
Packit Service 1fb00e
    if (c == EOF)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (FALSE);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (TRUE);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/********************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    PrDoCommentType2
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  none
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      none
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Process a new "//" comment. Just toss it.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
static char
Packit Service 1fb00e
PrDoCommentType2 (
Packit Service 1fb00e
    void)
Packit Service 1fb00e
{
Packit Service 1fb00e
    int                 c;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    while (((c = input ()) != '\n') && (c != EOF))
Packit Service 1fb00e
    {
Packit Service 1fb00e
    }
Packit Service 1fb00e
    if (c == EOF)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (FALSE);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (TRUE);
Packit Service 1fb00e
}