📄 aslcompiler.l
字号:
"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 + -