Jump to content

Compiler/Simple file inclusion pre processor: Difference between revisions

Added AWK
(→‎{{header|ALGOL 68}}: Changed the "read" pragmatic comment to include the file only if it hasn't been already included.)
(Added AWK)
Line 466:
END
</pre>
 
=={{header|AWK}}==
AWK does not have file-inclusion as standard, however some implementations, particularly GNU Awk do provide file inclusion.
<br>This include pre-processor differs from GAWK syntax in that the include directive is ".include", not "@include" and ".include" can appear inside or outside functions. The file name can be quoted or not. Nested includes are not supported.
<br>The source can be a named file or read from stdin. If it is read from stdin, <code>-v sec=sourceName</code> can be specified on the AWK command line to name the file. The pre-processed source is writen to stdout.
<lang awk># include.awk: simple file inclusion pre-processor
#
# the command line can specify:
# -v srcName=<source file path>
 
 
BEGIN {
 
FALSE = 0;
TRUE = 1;
 
srcName = srcName "";
 
 
} # BEGIN
 
 
{
 
if( $1 == ".include" )
{
# must include a file
includeFile( $0 );
}
else
{
# normal line
printf( "%s\n",
$0 );
 
} # if various lines;;
 
}
 
 
 
function includeFile( includeLine, fileName,
ioStat,
line )
{
 
# get the file name from the .include line
fileName = includeLine;
sub( /^ *.include */, "", fileName );
sub( / *$/, "", fileName );
sub( / *#.*$/, "", fileName );
 
if( fileName ~ /^"/ )
{
# quoted file name
sub( /^"/, "", fileName );
sub( /"$/, "", fileName );
gsub( /""/, "\"", fileName );
 
} # if fileName ~ /^"/
 
printf( "#line 1 %s\n",
fileName );
 
ioStat = ( getline line < fileName );
 
while( ioStat > 0 )
{
# have a source line
printf( "%s\n",
line );
ioStat = ( getline line < fileName );
 
} # while ioStat > 0
 
if( ioStat < 0 )
{
# I/O error
printf( ".include %s # not found or I/O error\n",
fileName );
 
} # if ioStat < 0
 
close( fileName );
 
printf( "#line %d %s\n",
NR,
( srcName != "" ? srcName : FILENAME ) );
 
 
} # includeFile</lang>
 
=={{header|Julia}}==
3,045

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.