mirror of
https://github.com/acpica/acpica/
synced 2025-02-23 17:04:21 +03:00
iASL: add data table prototype flag
This flag enables the the new flex/bison prototype front-end of the data table compiler. Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
This commit is contained in:
parent
dd3c0a35fa
commit
36037bdaf0
@ -272,3 +272,4 @@ MFLAGS= -P -I$(ASL_COMPILER)
|
||||
|
||||
LEX= flex
|
||||
LFLAGS += -i -s
|
||||
DLFLAGS += -i
|
||||
|
@ -33,12 +33,15 @@ vpath %.c \
|
||||
HEADERS = \
|
||||
$(wildcard $(ASL_COMPILER)/*.h)\
|
||||
$(OBJDIR)/aslcompiler.y.h\
|
||||
$(OBJDIR)/dtcompilerparser.y.h\
|
||||
$(OBJDIR)/dtparser.y.h\
|
||||
$(OBJDIR)/prparser.y.h
|
||||
|
||||
OBJECTS = \
|
||||
$(OBJDIR)/aslcompilerlex.o\
|
||||
$(OBJDIR)/aslcompilerparse.o\
|
||||
$(OBJDIR)/dtcompilerparserlex.o\
|
||||
$(OBJDIR)/dtcompilerparserparse.o\
|
||||
$(OBJDIR)/dtparserlex.o\
|
||||
$(OBJDIR)/dtparserparse.o\
|
||||
$(OBJDIR)/prparserlex.o\
|
||||
@ -251,11 +254,14 @@ INTERMEDIATES = \
|
||||
$(OBJDIR)/aslcompilerparse.c\
|
||||
$(OBJDIR)/dtparserlex.c\
|
||||
$(OBJDIR)/dtparserparse.c\
|
||||
$(OBJDIR)/dtcompilerparserlex.c\
|
||||
$(OBJDIR)/dtcompilerparserparse.c\
|
||||
$(OBJDIR)/prparserlex.c\
|
||||
$(OBJDIR)/prparserparse.c
|
||||
|
||||
MISC = \
|
||||
$(OBJDIR)/aslcompiler.y.h\
|
||||
$(OBJDIR)/dtcompilerparser.y.h\
|
||||
$(OBJDIR)/dtparser.y.h\
|
||||
$(OBJDIR)/prparser.y.h
|
||||
|
||||
@ -322,9 +328,17 @@ $(OBJDIR)/aslcompilerparse.c $(OBJDIR)/aslcompiler.y.h : $(OBJDIR)/aslcompiler.y
|
||||
@echo "- " $(YACC) " "$<
|
||||
@$(call safe_yacc,AslCompiler,$<,$@)
|
||||
|
||||
$(OBJDIR)/dtcompilerparserlex.c : $(ASL_COMPILER)/dtcompilerparser.l $(OBJDIR)/dtcompilerparser.y.h
|
||||
@echo "- " $(LEX) " "$<
|
||||
@$(LEX) $(DLFLAGS) -PDtCompilerParser -o$@ $<
|
||||
|
||||
$(OBJDIR)/dtcompilerparserparse.c $(OBJDIR)/dtcompilerparser.y.h : $(ASL_COMPILER)/dtcompilerparser.y
|
||||
@echo "- " $(YACC) " "$<
|
||||
@$(call safe_yacc,DtCompilerParser,$<,$@)
|
||||
|
||||
$(OBJDIR)/dtparserlex.c : $(ASL_COMPILER)/dtparser.l $(OBJDIR)/dtparser.y.h
|
||||
@echo "- " $(LEX) " "$<
|
||||
@$(LEX) $(LFLAGS) -PDtParser -o$@ $<
|
||||
@$(LEX) $(DLFLAGS) -PDtParser -o$@ $<
|
||||
|
||||
$(OBJDIR)/dtparserparse.c $(OBJDIR)/dtparser.y.h : $(ASL_COMPILER)/dtparser.y
|
||||
@echo "- " $(YACC) " "$<
|
||||
@ -352,6 +366,14 @@ $(OBJDIR)/aslcompilerparse.o : $(OBJDIR)/aslcompilerparse.c
|
||||
@echo "- " "Intermediate" $<
|
||||
@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
|
||||
|
||||
$(OBJDIR)/dtcompilerparserlex.o : $(OBJDIR)/dtcompilerparserlex.c
|
||||
@echo "- " "Intermediate" $<
|
||||
@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
|
||||
|
||||
$(OBJDIR)/dtcompilerparserparse.o : $(OBJDIR)/dtcompilerparserparse.c
|
||||
@echo "- " "Intermediate" $<
|
||||
@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
|
||||
|
||||
$(OBJDIR)/dtparserlex.o : $(OBJDIR)/dtparserlex.c
|
||||
@echo "- " "Intermediate" $<
|
||||
@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
|
||||
|
@ -1307,6 +1307,10 @@ UINT64
|
||||
UtDoConstant (
|
||||
char *String);
|
||||
|
||||
char *
|
||||
AcpiUtStrdup(
|
||||
char *String);
|
||||
|
||||
|
||||
/*
|
||||
* asluuid - UUID support
|
||||
|
@ -254,6 +254,7 @@ extern int DtParserdebug;
|
||||
extern int PrParserdebug;
|
||||
extern const ASL_MAPPING_ENTRY AslKeywordMapping[];
|
||||
extern char *AslCompilertext;
|
||||
extern char *DtCompilerParsertext;
|
||||
|
||||
/*
|
||||
* Older versions of Bison won't emit this external in the generated header.
|
||||
|
@ -247,6 +247,7 @@ Usage (
|
||||
ACPI_OPTION ("", " (Original comments are passed through to ASL+ file)");
|
||||
|
||||
printf ("\nData Table Compiler:\n");
|
||||
ACPI_OPTION ("-tp", "Compile tables with flex/bison prototype");
|
||||
ACPI_OPTION ("-G", "Compile custom table that contains generic operators");
|
||||
ACPI_OPTION ("-T <sig list>|ALL", "Create ACPI table template/example files");
|
||||
ACPI_OPTION ("-T <count>", "Emit DSDT and <count> SSDTs to same file");
|
||||
|
@ -837,6 +837,11 @@ AslDoOptions (
|
||||
AslGbl_HexOutputFlag = HEX_OUTPUT_C;
|
||||
break;
|
||||
|
||||
case 'p': /* data table flex/bison prototype */
|
||||
|
||||
AslGbl_DtLexBisonPrototype = TRUE;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
|
||||
AslGbl_HexOutputFlag = HEX_OUTPUT_ASL;
|
||||
|
@ -1057,3 +1057,29 @@ UtDoConstant (
|
||||
|
||||
return (ConvertedInteger);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStrdup
|
||||
*
|
||||
* PARAMETERS: String1 - string to duplicate
|
||||
*
|
||||
* RETURN: int that signifies string relationship. Zero means strings
|
||||
* are equal.
|
||||
*
|
||||
* DESCRIPTION: Duplicate the string using UtCacheAlloc to avoid manual memory
|
||||
* reclamation.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
char *
|
||||
AcpiUtStrdup(
|
||||
char *String)
|
||||
{
|
||||
char *NewString = (char *) UtLocalCalloc (strlen (String) + 1);
|
||||
|
||||
|
||||
strcpy (NewString, String);
|
||||
return (NewString);
|
||||
}
|
||||
|
@ -223,13 +223,28 @@ DtDoCompile (
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan the input file (file is already open) and
|
||||
* build the parse tree
|
||||
*/
|
||||
Event = UtBeginEvent ("Scan and parse input file");
|
||||
FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle);
|
||||
UtEndEvent (Event);
|
||||
/* Compile the parse tree */
|
||||
|
||||
if (AslGbl_DtLexBisonPrototype)
|
||||
{
|
||||
Event = UtBeginEvent ("Parse data table in prototype mode");
|
||||
|
||||
DtCompilerInitLexer (AslGbl_Files[ASL_FILE_INPUT].Handle);
|
||||
DtCompilerParserparse ();
|
||||
FieldList = AslGbl_FieldList;
|
||||
|
||||
UtEndEvent (Event);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Scan the input file (file is already open) and
|
||||
* build the parse tree
|
||||
*/
|
||||
Event = UtBeginEvent ("Scan and parse input file");
|
||||
FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle);
|
||||
UtEndEvent (Event);
|
||||
}
|
||||
|
||||
/* Did the parse tree get successfully constructed? */
|
||||
|
||||
@ -245,9 +260,6 @@ DtDoCompile (
|
||||
|
||||
Event = UtBeginEvent ("Compile parse tree");
|
||||
|
||||
/*
|
||||
* Compile the parse tree
|
||||
*/
|
||||
Status = DtCompileDataTable (&FieldList);
|
||||
UtEndEvent (Event);
|
||||
|
||||
|
@ -194,7 +194,7 @@ typedef struct dt_field
|
||||
{
|
||||
char *Name; /* Field name (from name : value) */
|
||||
char *Value; /* Field value (from name : value) */
|
||||
UINT32 StringLength;/* Length of Value */
|
||||
UINT32 StringLength; /* Length of Value */
|
||||
struct dt_field *Next; /* Next field */
|
||||
struct dt_field *NextLabel; /* If field is a label, next label */
|
||||
UINT32 Line; /* Line number for this field */
|
||||
@ -256,6 +256,10 @@ DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*AslGbl_LabelList, NULL);
|
||||
|
||||
DT_EXTERN UINT32 DT_INIT_GLOBAL (AslGbl_CurrentTableOffset, 0);
|
||||
|
||||
/* Data table compiler Flex/Bison prototype */
|
||||
|
||||
DT_EXTERN BOOLEAN DT_INIT_GLOBAL (AslGbl_DtLexBisonPrototype, FALSE);
|
||||
|
||||
/* Local caches */
|
||||
|
||||
DT_EXTERN UINT32 DT_INIT_GLOBAL (AslGbl_SubtableCount, 0);
|
||||
@ -288,6 +292,14 @@ DtCompilePadding (
|
||||
UINT32 Length,
|
||||
DT_SUBTABLE **RetSubtable);
|
||||
|
||||
void
|
||||
DtCreateField (
|
||||
char *Name,
|
||||
char *Value,
|
||||
UINT32 Line,
|
||||
UINT32 Offset,
|
||||
UINT32 Column,
|
||||
UINT32 NameColumn);
|
||||
|
||||
/* dtio - binary and text input/output */
|
||||
|
||||
@ -427,10 +439,23 @@ DtCompileFlag (
|
||||
|
||||
/* dtparser - lex/yacc files */
|
||||
|
||||
UINT64 DtCompilerParserResult; /* Expression return value */
|
||||
int
|
||||
DtCompilerParserparse (
|
||||
void);
|
||||
|
||||
UINT64
|
||||
DtEvaluateExpression (
|
||||
char *ExprString);
|
||||
|
||||
void
|
||||
DtCompilerInitLexer (
|
||||
FILE *inFile);
|
||||
|
||||
void
|
||||
DtCompilerTerminateLexer (
|
||||
void);
|
||||
|
||||
int
|
||||
DtInitLexer (
|
||||
char *String);
|
||||
|
232
source/compiler/dtcompilerparser.l
Normal file
232
source/compiler/dtcompilerparser.l
Normal file
@ -0,0 +1,232 @@
|
||||
%{
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: dtcompilerparser.l - Flex input file for table compiler lexer
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* 1. Copyright Notice
|
||||
*
|
||||
* Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 2. License
|
||||
*
|
||||
* 2.1. This is your license from Intel Corp. under its intellectual property
|
||||
* rights. You may have additional license terms from the party that provided
|
||||
* you this software, covering your right to use that party's intellectual
|
||||
* property rights.
|
||||
*
|
||||
* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
|
||||
* copy of the source code appearing in this file ("Covered Code") an
|
||||
* irrevocable, perpetual, worldwide license under Intel's copyrights in the
|
||||
* base code distributed originally by Intel ("Original Intel Code") to copy,
|
||||
* make derivatives, distribute, use and display any portion of the Covered
|
||||
* Code in any form, with the right to sublicense such rights; and
|
||||
*
|
||||
* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
|
||||
* license (with the right to sublicense), under only those claims of Intel
|
||||
* patents that are infringed by the Original Intel Code, to make, use, sell,
|
||||
* offer to sell, and import the Covered Code and derivative works thereof
|
||||
* solely to the minimum extent necessary to exercise the above copyright
|
||||
* license, and in no event shall the patent license extend to any additions
|
||||
* to or modifications of the Original Intel Code. No other license or right
|
||||
* is granted directly or by implication, estoppel or otherwise;
|
||||
*
|
||||
* The above copyright and patent license is granted only if the following
|
||||
* conditions are met:
|
||||
*
|
||||
* 3. Conditions
|
||||
*
|
||||
* 3.1. Redistribution of Source with Rights to Further Distribute Source.
|
||||
* Redistribution of source code of any substantial portion of the Covered
|
||||
* Code or modification with rights to further distribute source must include
|
||||
* the above Copyright Notice, the above License, this list of Conditions,
|
||||
* and the following Disclaimer and Export Compliance provision. In addition,
|
||||
* Licensee must cause all Covered Code to which Licensee contributes to
|
||||
* contain a file documenting the changes Licensee made to create that Covered
|
||||
* Code and the date of any change. Licensee must include in that file the
|
||||
* documentation of any changes made by any predecessor Licensee. Licensee
|
||||
* must include a prominent statement that the modification is derived,
|
||||
* directly or indirectly, from Original Intel Code.
|
||||
*
|
||||
* 3.2. Redistribution of Source with no Rights to Further Distribute Source.
|
||||
* Redistribution of source code of any substantial portion of the Covered
|
||||
* Code or modification without rights to further distribute source must
|
||||
* include the following Disclaimer and Export Compliance provision in the
|
||||
* documentation and/or other materials provided with distribution. In
|
||||
* addition, Licensee may not authorize further sublicense of source of any
|
||||
* portion of the Covered Code, and must include terms to the effect that the
|
||||
* license from Licensee to its licensee is limited to the intellectual
|
||||
* property embodied in the software Licensee provides to its licensee, and
|
||||
* not to intellectual property embodied in modifications its licensee may
|
||||
* make.
|
||||
*
|
||||
* 3.3. Redistribution of Executable. Redistribution in executable form of any
|
||||
* substantial portion of the Covered Code or modification must reproduce the
|
||||
* above Copyright Notice, and the following Disclaimer and Export Compliance
|
||||
* provision in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3.4. Intel retains all right, title, and interest in and to the Original
|
||||
* Intel Code.
|
||||
*
|
||||
* 3.5. Neither the name Intel nor any other trademark owned or controlled by
|
||||
* Intel shall be used in advertising or otherwise to promote the sale, use or
|
||||
* other dealings in products derived from or relating to the Covered Code
|
||||
* without prior written authorization from Intel.
|
||||
*
|
||||
* 4. Disclaimer and Export Compliance
|
||||
*
|
||||
* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
|
||||
* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
|
||||
* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
|
||||
* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
|
||||
* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
|
||||
* PARTICULAR PURPOSE.
|
||||
*
|
||||
* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
|
||||
* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
|
||||
* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
|
||||
* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
|
||||
* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
|
||||
* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
|
||||
* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
|
||||
* LIMITED REMEDY.
|
||||
*
|
||||
* 4.3. Licensee shall not export, either directly or indirectly, any of this
|
||||
* software or system incorporating such software without first obtaining any
|
||||
* required license or other approval from the U. S. Department of Commerce or
|
||||
* any other agency or department of the United States Government. In the
|
||||
* event Licensee exports any such software from the United States or
|
||||
* re-exports any such software from a foreign destination, Licensee shall
|
||||
* ensure that the distribution and export/re-export of the software is in
|
||||
* compliance with all laws, regulations, orders, or other restrictions of the
|
||||
* U.S. Export Administration Regulations. Licensee agrees that neither it nor
|
||||
* any of its subsidiaries will export/re-export any technical data, process,
|
||||
* software, or service, directly or indirectly, to any country for which the
|
||||
* United States government or any agency thereof requires an export license,
|
||||
* other governmental approval, or letter of assurance, without first obtaining
|
||||
* such license, approval or letter.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Alternatively, you may choose to be licensed under the terms of the
|
||||
* following license:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions, and the following disclaimer,
|
||||
* without modification.
|
||||
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
||||
* substantially similar to the "NO WARRANTY" disclaimer below
|
||||
* ("Disclaimer") and any redistribution must be conditioned upon
|
||||
* including a substantially similar Disclaimer requirement for further
|
||||
* binary redistribution.
|
||||
* 3. Neither the names of the above-listed copyright holders nor the names
|
||||
* of any contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Alternatively, you may choose to be licensed under the terms of the
|
||||
* GNU General Public License ("GPL") version 2 as published by the Free
|
||||
* Software Foundation.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "aslcompiler.h"
|
||||
#include "dtcompilerparser.y.h"
|
||||
|
||||
YYSTYPE DtCompilerlval;
|
||||
|
||||
#define _COMPONENT ACPI_COMPILER
|
||||
ACPI_MODULE_NAME ("dtcompilerscanner")
|
||||
|
||||
/* handle locations */
|
||||
|
||||
int DtCompilerParsercolumn = 1;
|
||||
int DtCompilerParserByteOffset = 0;
|
||||
|
||||
#define YY_USER_ACTION \
|
||||
DtCompilerParserlloc.first_line = DtCompilerParserlloc.last_line = DtCompilerParserlineno; \
|
||||
DtCompilerParserlloc.first_column = DtCompilerParsercolumn; \
|
||||
DtCompilerParserlloc.first_byte_offset = DtCompilerParserByteOffset; \
|
||||
DtCompilerParserlloc.last_column = DtCompilerParsercolumn + DtCompilerParserleng-1; \
|
||||
DtCompilerParsercolumn += DtCompilerParserleng; \
|
||||
DtCompilerParserByteOffset += DtCompilerParserleng; \
|
||||
DbgPrint (ASL_PARSE_OUTPUT,\
|
||||
"user action occurred. DtCompilerParserlloc.first_line: %u offset: %u\n",\
|
||||
DtCompilerParserlloc.first_line, DtCompilerParserlloc.first_byte_offset);
|
||||
%}
|
||||
|
||||
%option nounput noinput yylineno
|
||||
|
||||
WhiteSpace [ \t\v\r]+
|
||||
NewLines [\n]+
|
||||
|
||||
Text [ :\-\(\)\/\t\v\r0-9a-zA-Z]*
|
||||
Data [0-9a-zA-Z_]([ 0-9a-zA-Z\(\)\-\/_]*[0-9a-zA-Z\(\)])?
|
||||
StringData [0-9a-zA-Z\\_][ 0-9a-zA-Z]*
|
||||
Comment \[{Text}\]
|
||||
|
||||
%%
|
||||
|
||||
{WhiteSpace} /* Ignore */
|
||||
{Comment} /* Ignore */
|
||||
{Data} {
|
||||
char *s;
|
||||
s=UtLocalCacheCalloc (strlen (DtCompilerParsertext) + 1);
|
||||
strcpy (s, DtCompilerParsertext);
|
||||
DtCompilerParserlval.s = s;
|
||||
DbgPrint (ASL_PARSE_OUTPUT, "Data: %s\n", s);
|
||||
return (DT_PARSEOP_DATA);
|
||||
}
|
||||
|
||||
\"{StringData}\" { // remove outer quotes from the string, they are unnecessary
|
||||
char *s;
|
||||
int size = strlen (DtCompilerParsertext);
|
||||
s=UtLocalCacheCalloc (size - 1);
|
||||
strncpy (s, DtCompilerParsertext + 1, size - 2);
|
||||
DtCompilerParserlval.s = s;
|
||||
DbgPrint (ASL_PARSE_OUTPUT, "Data: %s\n", s);
|
||||
return (DT_PARSEOP_STRING_DATA);
|
||||
}
|
||||
|
||||
":" { return (':'); }
|
||||
{NewLines} { DtCompilerParsercolumn = 1; return ('\n'); } /* helps with ambiguity for labels that aren't associated to data */
|
||||
|
||||
%%
|
||||
|
||||
|
||||
/*
|
||||
* Local support functions
|
||||
*/
|
||||
|
||||
void
|
||||
DtCompilerInitLexer (
|
||||
FILE *inFile)
|
||||
{
|
||||
yyin = inFile;
|
||||
}
|
||||
|
||||
void
|
||||
DtCompilerTerminateLexer (
|
||||
void)
|
||||
{
|
||||
}
|
268
source/compiler/dtcompilerparser.y
Normal file
268
source/compiler/dtcompilerparser.y
Normal file
@ -0,0 +1,268 @@
|
||||
%{
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: dtcompilerparser.y - Bison input file for table compiler parser
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* 1. Copyright Notice
|
||||
*
|
||||
* Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 2. License
|
||||
*
|
||||
* 2.1. This is your license from Intel Corp. under its intellectual property
|
||||
* rights. You may have additional license terms from the party that provided
|
||||
* you this software, covering your right to use that party's intellectual
|
||||
* property rights.
|
||||
*
|
||||
* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
|
||||
* copy of the source code appearing in this file ("Covered Code") an
|
||||
* irrevocable, perpetual, worldwide license under Intel's copyrights in the
|
||||
* base code distributed originally by Intel ("Original Intel Code") to copy,
|
||||
* make derivatives, distribute, use and display any portion of the Covered
|
||||
* Code in any form, with the right to sublicense such rights; and
|
||||
*
|
||||
* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
|
||||
* license (with the right to sublicense), under only those claims of Intel
|
||||
* patents that are infringed by the Original Intel Code, to make, use, sell,
|
||||
* offer to sell, and import the Covered Code and derivative works thereof
|
||||
* solely to the minimum extent necessary to exercise the above copyright
|
||||
* license, and in no event shall the patent license extend to any additions
|
||||
* to or modifications of the Original Intel Code. No other license or right
|
||||
* is granted directly or by implication, estoppel or otherwise;
|
||||
*
|
||||
* The above copyright and patent license is granted only if the following
|
||||
* conditions are met:
|
||||
*
|
||||
* 3. Conditions
|
||||
*
|
||||
* 3.1. Redistribution of Source with Rights to Further Distribute Source.
|
||||
* Redistribution of source code of any substantial portion of the Covered
|
||||
* Code or modification with rights to further distribute source must include
|
||||
* the above Copyright Notice, the above License, this list of Conditions,
|
||||
* and the following Disclaimer and Export Compliance provision. In addition,
|
||||
* Licensee must cause all Covered Code to which Licensee contributes to
|
||||
* contain a file documenting the changes Licensee made to create that Covered
|
||||
* Code and the date of any change. Licensee must include in that file the
|
||||
* documentation of any changes made by any predecessor Licensee. Licensee
|
||||
* must include a prominent statement that the modification is derived,
|
||||
* directly or indirectly, from Original Intel Code.
|
||||
*
|
||||
* 3.2. Redistribution of Source with no Rights to Further Distribute Source.
|
||||
* Redistribution of source code of any substantial portion of the Covered
|
||||
* Code or modification without rights to further distribute source must
|
||||
* include the following Disclaimer and Export Compliance provision in the
|
||||
* documentation and/or other materials provided with distribution. In
|
||||
* addition, Licensee may not authorize further sublicense of source of any
|
||||
* portion of the Covered Code, and must include terms to the effect that the
|
||||
* license from Licensee to its licensee is limited to the intellectual
|
||||
* property embodied in the software Licensee provides to its licensee, and
|
||||
* not to intellectual property embodied in modifications its licensee may
|
||||
* make.
|
||||
*
|
||||
* 3.3. Redistribution of Executable. Redistribution in executable form of any
|
||||
* substantial portion of the Covered Code or modification must reproduce the
|
||||
* above Copyright Notice, and the following Disclaimer and Export Compliance
|
||||
* provision in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3.4. Intel retains all right, title, and interest in and to the Original
|
||||
* Intel Code.
|
||||
*
|
||||
* 3.5. Neither the name Intel nor any other trademark owned or controlled by
|
||||
* Intel shall be used in advertising or otherwise to promote the sale, use or
|
||||
* other dealings in products derived from or relating to the Covered Code
|
||||
* without prior written authorization from Intel.
|
||||
*
|
||||
* 4. Disclaimer and Export Compliance
|
||||
*
|
||||
* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
|
||||
* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
|
||||
* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
|
||||
* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
|
||||
* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
|
||||
* PARTICULAR PURPOSE.
|
||||
*
|
||||
* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
|
||||
* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
|
||||
* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
|
||||
* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
|
||||
* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
|
||||
* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
|
||||
* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
|
||||
* LIMITED REMEDY.
|
||||
*
|
||||
* 4.3. Licensee shall not export, either directly or indirectly, any of this
|
||||
* software or system incorporating such software without first obtaining any
|
||||
* required license or other approval from the U. S. Department of Commerce or
|
||||
* any other agency or department of the United States Government. In the
|
||||
* event Licensee exports any such software from the United States or
|
||||
* re-exports any such software from a foreign destination, Licensee shall
|
||||
* ensure that the distribution and export/re-export of the software is in
|
||||
* compliance with all laws, regulations, orders, or other restrictions of the
|
||||
* U.S. Export Administration Regulations. Licensee agrees that neither it nor
|
||||
* any of its subsidiaries will export/re-export any technical data, process,
|
||||
* software, or service, directly or indirectly, to any country for which the
|
||||
* United States government or any agency thereof requires an export license,
|
||||
* other governmental approval, or letter of assurance, without first obtaining
|
||||
* such license, approval or letter.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Alternatively, you may choose to be licensed under the terms of the
|
||||
* following license:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions, and the following disclaimer,
|
||||
* without modification.
|
||||
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
||||
* substantially similar to the "NO WARRANTY" disclaimer below
|
||||
* ("Disclaimer") and any redistribution must be conditioned upon
|
||||
* including a substantially similar Disclaimer requirement for further
|
||||
* binary redistribution.
|
||||
* 3. Neither the names of the above-listed copyright holders nor the names
|
||||
* of any contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Alternatively, you may choose to be licensed under the terms of the
|
||||
* GNU General Public License ("GPL") version 2 as published by the Free
|
||||
* Software Foundation.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "aslcompiler.h"
|
||||
|
||||
|
||||
#define _COMPONENT DT_COMPILER
|
||||
ACPI_MODULE_NAME ("dtcompilerparser")
|
||||
|
||||
void * AslLocalAllocate (unsigned int Size);
|
||||
|
||||
/* Bison/yacc configuration */
|
||||
|
||||
#undef alloca
|
||||
#define alloca AslLocalAllocate
|
||||
|
||||
int DtCompilerParserlex (void);
|
||||
int DtCompilerParserparse (void);
|
||||
void DtCompilerParsererror (char const *msg);
|
||||
extern char *DtCompilerParsertext;
|
||||
extern DT_FIELD *AslGbl_CurrentField;
|
||||
|
||||
extern UINT64 DtCompilerParserResult; /* Expression return value */
|
||||
extern UINT64 DtCompilerParserlineno; /* Current line number */
|
||||
|
||||
/* Bison/yacc configuration */
|
||||
|
||||
#define yytname DtCompilerParsername
|
||||
#define YYDEBUG 1 /* Enable debug output */
|
||||
#define YYERROR_VERBOSE 1 /* Verbose error messages */
|
||||
#define YYFLAG -32768
|
||||
|
||||
/* Define YYMALLOC/YYFREE to prevent redefinition errors */
|
||||
|
||||
#define YYMALLOC malloc
|
||||
#define YYFREE free
|
||||
|
||||
%}
|
||||
|
||||
%code requires {
|
||||
|
||||
typedef struct YYLTYPE {
|
||||
int first_line;
|
||||
int last_line;
|
||||
int first_column;
|
||||
int last_column;
|
||||
int first_byte_offset;
|
||||
} YYLTYPE;
|
||||
|
||||
#define YYLTYPE_IS_DECLARED 1
|
||||
}
|
||||
|
||||
|
||||
%union {
|
||||
char *s;
|
||||
DT_FIELD *f;
|
||||
}
|
||||
|
||||
|
||||
%type <f> Table
|
||||
%token <s> DT_PARSEOP_DATA
|
||||
%token <s> DT_PARSEOP_STRING_DATA
|
||||
%type <s> Data
|
||||
|
||||
|
||||
%%
|
||||
|
||||
Table
|
||||
:
|
||||
FieldList { DtCompilerParserResult = 5;}
|
||||
;
|
||||
|
||||
FieldList
|
||||
: Field FieldList
|
||||
| Field
|
||||
;
|
||||
|
||||
Field
|
||||
: DT_PARSEOP_DATA ':' '\n' /* ignore this field, it has no valid data */
|
||||
| DT_PARSEOP_DATA ':' Data '\n' { DtCreateField ($1, $3, (@3).first_line, (@1).first_byte_offset, (@1).first_column, (@3).first_column); }
|
||||
;
|
||||
|
||||
Data
|
||||
: DT_PARSEOP_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); }
|
||||
| DT_PARSEOP_STRING_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); }
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
|
||||
/*
|
||||
* Local support functions, including parser entry point
|
||||
*/
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: DtCompilerParsererror
|
||||
*
|
||||
* PARAMETERS: Message - Parser-generated error message
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Handler for parser errors
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
void
|
||||
DtCompilerParsererror (
|
||||
char const *Message)
|
||||
{
|
||||
DtError (ASL_ERROR, ASL_MSG_SYNTAX,
|
||||
AslGbl_CurrentField, (char *) Message);
|
||||
}
|
||||
|
||||
int
|
||||
DtCompilerParserwrap(void)
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
|
@ -280,7 +280,9 @@ DtCompileString (
|
||||
|
||||
if (Length > ByteLength)
|
||||
{
|
||||
sprintf (AslGbl_MsgBuffer, "Maximum %u characters", ByteLength);
|
||||
sprintf (AslGbl_MsgBuffer,
|
||||
"Maximum %u characters, found %u characters [%s]",
|
||||
ByteLength, Length, Field->Value);
|
||||
DtError (ASL_ERROR, ASL_MSG_STRING_LENGTH, Field, AslGbl_MsgBuffer);
|
||||
Length = ByteLength;
|
||||
}
|
||||
|
@ -493,6 +493,59 @@ DtParseLine (
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: DtCreateField
|
||||
*
|
||||
* PARAMETERS: Name
|
||||
* Value
|
||||
* Line
|
||||
* Offset
|
||||
* Column
|
||||
* NameColumn
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Create a field
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
void
|
||||
DtCreateField (
|
||||
char *Name,
|
||||
char *Value,
|
||||
UINT32 Line,
|
||||
UINT32 Offset,
|
||||
UINT32 Column,
|
||||
UINT32 NameColumn)
|
||||
{
|
||||
DT_FIELD *Field = UtFieldCacheCalloc ();
|
||||
|
||||
|
||||
Field->StringLength = 0;
|
||||
if (Name)
|
||||
{
|
||||
Field->Name =
|
||||
strcpy (UtLocalCacheCalloc (strlen (Name) + 1), Name);
|
||||
}
|
||||
|
||||
if (Value)
|
||||
{
|
||||
Field->StringLength = strlen (Value);
|
||||
Field->Value =
|
||||
strcpy (UtLocalCacheCalloc (Field->StringLength + 1), Value);
|
||||
}
|
||||
|
||||
Field->Line = Line;
|
||||
Field->ByteOffset = Offset;
|
||||
Field->NameColumn = NameColumn;
|
||||
Field->Column = Column;
|
||||
DtLinkField (Field);
|
||||
|
||||
DtDumpFieldList (AslGbl_FieldList);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: DtGetNextLine
|
||||
|
@ -227,7 +227,6 @@ int
|
||||
DtInitLexer (
|
||||
char *String)
|
||||
{
|
||||
|
||||
LexBuffer = yy_scan_string (String);
|
||||
return (LexBuffer == NULL);
|
||||
}
|
||||
@ -236,6 +235,5 @@ void
|
||||
DtTerminateLexer (
|
||||
void)
|
||||
{
|
||||
|
||||
yy_delete_buffer (LexBuffer);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user