⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aslcompiler.l

📁 acpi tools for linux include acpiexec and acpixtract
💻 L
📖 第 1 页 / 共 3 页
字号:
"SMBBlock"                  { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK); }"SMBProcessCall"            { count (0); return (PARSEOP_ACCESSATTRIB_WORD_CALL); }"SMBBlockProcessCall"       { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK_CALL); }"MTR"                       { count (0); return (PARSEOP_MATCHTYPE_MTR); }"MEQ"                       { count (0); return (PARSEOP_MATCHTYPE_MEQ); }"MLE"                       { count (0); return (PARSEOP_MATCHTYPE_MLE); }"MLT"                       { count (0); return (PARSEOP_MATCHTYPE_MLT); }"MGE"                       { count (0); return (PARSEOP_MATCHTYPE_MGE); }"MGT"                       { count (0); return (PARSEOP_MATCHTYPE_MGT); }"Compatibility"             { count (0); return (PARSEOP_DMATYPE_COMPATIBILITY); }"TypeA"                     { count (0); return (PARSEOP_DMATYPE_A); }"TypeB"                     { count (0); return (PARSEOP_DMATYPE_B); }"TypeF"                     { count (0); return (PARSEOP_DMATYPE_F); }"BusMaster"                 { count (0); return (PARSEOP_BUSMASTERTYPE_MASTER); }"NotBusMaster"              { count (0); return (PARSEOP_BUSMASTERTYPE_NOTMASTER); }"Transfer8"                 { count (0); return (PARSEOP_XFERTYPE_8); }"Transfer8_16"              { count (0); return (PARSEOP_XFERTYPE_8_16); }"Transfer16"                { count (0); return (PARSEOP_XFERTYPE_16); }"ResourceConsumer"          { count (0); return (PARSEOP_RESOURCETYPE_CONSUMER); }"ResourceProducer"          { count (0); return (PARSEOP_RESOURCETYPE_PRODUCER); }"MinFixed"                  { count (0); return (PARSEOP_MINTYPE_FIXED); }"MinNotFixed"               { count (0); return (PARSEOP_MINTYPE_NOTFIXED); }"MaxFixed"                  { count (0); return (PARSEOP_MAXTYPE_FIXED); }"MaxNotFixed"               { count (0); return (PARSEOP_MAXTYPE_NOTFIXED); }"PosDecode"                 { count (0); return (PARSEOP_DECODETYPE_POS); }"SubDecode"                 { count (0); return (PARSEOP_DECODETYPE_SUB); }"ISAOnlyRanges"             { count (0); return (PARSEOP_RANGETYPE_ISAONLY); }"NonISAOnlyRanges"          { count (0); return (PARSEOP_RANGETYPE_NONISAONLY); }"EntireRange"               { count (0); return (PARSEOP_RANGETYPE_ENTIRE); }"Cacheable"                 { count (0); return (PARSEOP_MEMTYPE_CACHEABLE); }"WriteCombining"            { count (0); return (PARSEOP_MEMTYPE_WRITECOMBINING); }"Prefetchable"              { count (0); return (PARSEOP_MEMTYPE_PREFETCHABLE); }"NonCacheable"              { count (0); return (PARSEOP_MEMTYPE_NONCACHEABLE); }"ReadWrite"                 { count (0); return (PARSEOP_READWRITETYPE_BOTH); }"ReadOnly"                  { count (0); return (PARSEOP_READWRITETYPE_READONLY); }"Edge"                      { count (0); return (PARSEOP_INTTYPE_EDGE); }"Level"                     { count (0); return (PARSEOP_INTTYPE_LEVEL); }"ActiveHigh"                { count (0); return (PARSEOP_INTLEVEL_ACTIVEHIGH); }"ActiveLow"                 { count (0); return (PARSEOP_INTLEVEL_ACTIVELOW); }"Shared"                    { count (0); return (PARSEOP_SHARETYPE_SHARED); }"Exclusive"                 { count (0); return (PARSEOP_SHARETYPE_EXCLUSIVE); }"Decode10"                  { count (0); return (PARSEOP_IODECODETYPE_10); }"Decode16"                  { count (0); return (PARSEOP_IODECODETYPE_16); }"TypeTranslation"           { count (0); return (PARSEOP_TYPE_TRANSLATION); }"TypeStatic"                { count (0); return (PARSEOP_TYPE_STATIC); }"SparseTranslation"         { count (0); return (PARSEOP_TRANSLATIONTYPE_SPARSE); }"DenseTranslation"          { count (0); return (PARSEOP_TRANSLATIONTYPE_DENSE); }"AddressRangeMemory"        { count (0); return (PARSEOP_ADDRESSTYPE_MEMORY); }"AddressRangeReserved"      { count (0); return (PARSEOP_ADDRESSTYPE_RESERVED); }"AddressRangeNVS"           { count (0); return (PARSEOP_ADDRESSTYPE_NVS); }"AddressRangeACPI"          { count (0); return (PARSEOP_ADDRESSTYPE_ACPI); }"{"                         { count (0); return('{'); }"}"                         { count (0); return('}'); }","                         { count (0); return(','); }"("                         { count (0); return('('); }")"                         { count (0); return(')'); }{NameSeg}                   { char *s;                                count (0);                                s=malloc (ACPI_NAME_SIZE + 1);                                if (strcmp (AslCompilertext, "\\"))                                {                                    strcpy (s, "____");                                    AcpiUtStrupr (AslCompilertext);                                }                                memcpy (s, AslCompilertext, strlen (AslCompilertext));                                AslCompilerlval.s = s;                                DbgPrint (ASL_PARSE_OUTPUT, "NameSeg: %s\n", s);                                return (PARSEOP_NAMESEG); }{NameString}                { char *s;                                count (0);                                s=malloc (strlen (AslCompilertext)+1);                                AcpiUtStrupr (AslCompilertext);                                strcpy (s, AslCompilertext);                                s[strlen (AslCompilertext)] = 0;                                AslCompilerlval.s = s;                                DbgPrint (ASL_PARSE_OUTPUT, "NameString: %s\n", s);                                return (PARSEOP_NAMESTRING); }"*" |"/"                         { count (1);                                AslCompilererror ("Parse error, expecting ASL keyword or name");}.                           { count (1);                                sprintf (MsgBuffer,                                    "Invalid character (0x%2.2X), expecting ASL keyword or name",                                    *AslCompilertext);                                AslCompilererror (MsgBuffer);}<<EOF>>                     { if (AslPopInputFileStack ())                                yyterminate();                              else                                return (PARSEOP_INCLUDE_END);};%%/*! [End] no source code translation !*/typedef struct asl_file_node{    FILE                    *File;    UINT32                  CurrentLineNumber;    YY_BUFFER_STATE         State;    char                    *Filename;    struct asl_file_node    *Next;} ASL_FILE_NODE;ASL_FILE_NODE               *InputStack = NULL;/******************************************************************************* * * FUNCTION:    AslPopInputFileStack * * PARAMETERS:  None * * RETURN:      0 if a node was popped, -1 otherwise * * DESCRIPTION: Pop the top of the input file stack and point the parser to *              the saved parse buffer contained in the fnode.  Also, set the *              global line counters to the saved values.  This function is *              called when an include file reaches EOF. * ******************************************************************************/intAslPopInputFileStack (    void){    ASL_FILE_NODE           *Fnode;    FILE                    *InputFile = NULL;    Fnode = InputStack;    DbgPrint (ASL_PARSE_OUTPUT, "\nPop InputFile Stack, Fnode %p\n\n", Fnode);    if (!Fnode)    {        return -1;    }    /* Close the current include file */    fclose (yyin);    /* Update the top-of-stack */    InputStack = Fnode->Next;    InputFile = Fnode->File;    /* Reset global line counter and filename */    Gbl_Files[ASL_FILE_INPUT].Filename = Fnode->Filename;    Gbl_CurrentLineNumber = Fnode->CurrentLineNumber;    /* Point the parser to the popped file */    yy_delete_buffer (YY_CURRENT_BUFFER);    yy_switch_to_buffer (Fnode->State);    /* All done with this node */    ACPI_FREE (Fnode);    return 0;}/******************************************************************************* * * FUNCTION:    AslPushInputFileStack * * PARAMETERS:  InputFile           - Open file pointer *              Filename            - Name of the file * * RETURN:      None * * DESCRIPTION: Push the InputFile onto the file stack, and point the parser *              to this file.  Called when an include file is successfully *              opened. * ******************************************************************************/voidAslPushInputFileStack (    FILE                    *InputFile,    char                    *Filename){    ASL_FILE_NODE           *Fnode;    YY_BUFFER_STATE         State;    /* Save the current state in an Fnode */    Fnode = UtLocalCalloc (sizeof (ASL_FILE_NODE));    Fnode->File                 = yyin;    Fnode->Next                 = InputStack;    Fnode->State                = YY_CURRENT_BUFFER;    Fnode->CurrentLineNumber    = Gbl_CurrentLineNumber;    Fnode->Filename             = Gbl_Files[ASL_FILE_INPUT].Filename;    /* Push it on the stack */    InputStack = Fnode;    /* Point the parser to this file */    State = yy_create_buffer (InputFile, YY_BUF_SIZE);    yy_switch_to_buffer (State);    DbgPrint (ASL_PARSE_OUTPUT, "\nPush InputFile Stack, returning %p\n\n", InputFile);    /* Reset the global line count and filename */    Gbl_Files[ASL_FILE_INPUT].Filename = Filename;    Gbl_CurrentLineNumber = 1;    yyin = InputFile;}/******************************************************************************* * * FUNCTION:    ResetCurrentLineBuffer * * PARAMETERS:  None * * RETURN:      None * * DESCRIPTION: Reset the Line Buffer to zero, increment global line numbers. * ******************************************************************************/voidResetCurrentLineBuffer (    void){    if (Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle)    {        FlWriteFile (ASL_FILE_SOURCE_OUTPUT, Gbl_CurrentLineBuffer,            Gbl_LineBufPtr - Gbl_CurrentLineBuffer);    }    Gbl_CurrentLineOffset += Gbl_CurrentColumn;    Gbl_CurrentColumn = 0;    Gbl_CurrentLineNumber++;    Gbl_LogicalLineNumber++;    Gbl_LineBufPtr = Gbl_CurrentLineBuffer;}/******************************************************************************* * * FUNCTION:    InsertLineBuffer * * PARAMETERS:  SourceChar      - One char from the input ASL source file * * RETURN:      None * * DESCRIPTION: Put one character of the source file into the temp line buffer * ******************************************************************************/#define ASL_SPACES_PER_TAB  4voidInsertLineBuffer (    int                     SourceChar){    UINT32                  i;    UINT32                  Count = 1;    if (SourceChar == EOF)    {        return;    }    Gbl_InputByteCount++;    /* Handle tabs.  Convert to spaces */    if (SourceChar == '\t')    {        SourceChar = ' ';        Count = ASL_SPACES_PER_TAB -                    (Gbl_CurrentColumn & (ASL_SPACES_PER_TAB-1));    }    for (i = 0; i < Count; i++)    {        Gbl_CurrentColumn++;        /* Insert the character into the line buffer */        *Gbl_LineBufPtr = (UINT8) SourceChar;        Gbl_LineBufPtr++;        if (Gbl_LineBufPtr > (Gbl_CurrentLineBuffer + (ASL_LINE_BUFFER_SIZE - 1)))        {#if 0            /*             * Warning if we have split a long source line.             * <Probably overkill>             */            sprintf (MsgBuffer, "Max %d", ASL_LINE_BUFFER_SIZE);            AslCommonError (ASL_WARNING, ASL_MSG_LONG_LINE,                            Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,                            Gbl_CurrentLineOffset, Gbl_CurrentColumn,                            Gbl_Files[ASL_FILE_INPUT].Filename, MsgBuffer);#endif            ResetCurrentLineBuffer ();        }        else if (SourceChar == '\n')        {            /* End of line */            ResetCurrentLineBuffer ();        }    }}/******************************************************************************* * * FUNCTION:    count * * PARAMETERS:  yytext      - Contains the matched keyword. *              Type        - Keyword/Character type: *                             0 = anything except a keyword *                             1 = pseudo-keywords *                             2 = non-executable ASL keywords *                             3 = executable ASL keywords * * RETURN:      None * * DESCRIPTION: Count keywords and put them into the line buffer * ******************************************************************************/voidcount (    int                 Type){    int                 i;    switch (Type)    {    case 2:        TotalKeywords++;        TotalNamedObjects++;        break;    case 3:        TotalKeywords++;        TotalExecutableOpcodes++;        break;    }    for (i = 0; (yytext[i] != 0) && (yytext[i] != EOF); i++)    {        InsertLineBuffer (yytext[i]);        *Gbl_LineBufPtr = 0;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -