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

📄 compile.awk

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 AWK
字号:
# to run: awk -f transit.awk transit.p0#BEGIN { "date" | getline	enable_index = 1	today = $0	printf("\n/* this file was generated on %s  */\n", today )	not_firstone = 0	# flag to avoid empty entry in 1st table	fpe = 0			# entry tbl array fill pointer	fpeo = 0		# entry tbl offset list fill pointer	fpdef = 0 		# define list fill pointer}### /^;/ { }			# line starting with a semicolon is comment /^[A-Z]/ {			# table name	if ( $1 == "TABLE" ) {	   tbl = $2		# get table name	   newtbl( tbl )	}	else if ( $1 == "COMPILE" ) {	   array_name = $2	   if ( $3 == "NOINDEX" ) { enable_index = 0 }	}	else {			# table entry	   ec = ec +1	   n = split( $0, fld, " " )	   action = fld[ n-1 ]	   newstate = fld[ n ]	   store( action, newstate )	   ecct = ecct +1	}}END {	store( action, newstate )	if ( enable_index ) {	    printf( "\n/* index name #defines: */\n\n",		 ec, ecct )	    for( ii = 1; ii <= fpeo; ii++ ){	       printf( "#define %-12s %3d\n", define[ ii ], ii -1 )	    }	}	printf( "\n\n/* size of transition table is %d bytes */\n",		 fpe )	if ( enable_index ) {	    printf( "\nstatic short int %s_offset [ ] ={", array_name )	    for( ii = 1; ii <= fpeo; ii++ ){	        if ( (ii % 10) == 1 ) printf("\n  ")	        printf( " %4d", entry_offset[ ii ] )	        if ( ii < fpeo ) printf( "," )	    }	    printf(" };\n")	}	printf( "\nstatic char %s_entry [ ] = {", array_name )	for( ii = 1; ii <= fpe; ii++ ){	    if ( (ii % 6) == 1 ) printf("\n  ")	    printf( " %-14s", entry[ ii ] )	    if ( ii < fpe ) printf( "," )	}	printf(" };\n")}function store(  act, ns ){#	printf( "%s %s\n",  act, ns )	entry[ ++fpe ] = act	entry[ ++fpe ] = ns }function newtbl( tbl ){	   if ( not_firstone ) {		store( action, newstate )	   }	   not_firstone = 1	   entry_offset[ ++fpeo ] = fpe		# entry tbl offset list	   define[ ++fpdef ] = tbl	# state name to define}

⌨️ 快捷键说明

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