我在哪里可以学习预处理器包含算法?

时间:2016-05-04 08:18:25

标签: php parsing include preprocessor

我正在为C编写一个PHP预处理器作为实验,我想创建一个包含符号,如:

//? include("myfile.h");

我正在努力绕过处理递归包容的好方法。

例如:

交流转换器

//? include ("a.h");

int main(int argc, char **argv)
{  
    return 0;
}

A.H

#ifndef A_H
#define A_H
//? include ("b.h");
//? include ("c.h");
#endif /* A_H */

b.h

#ifndef B_H
#define B_H

#endif /* B_H */

c.h

#ifndef C_H
#define C_H

#endif /* C_H */

我希望这个解析器接收我想要预处理的初始文件,并输出结果,例如(是的我剪切/粘贴):

#ifndef A_H
#define A_H
#ifndef B_H
#define B_H

#endif /* B_H */
#ifndef C_H
#define C_H

#endif /* C_H */
#endif /* A_H */

int main(int argc, char **argv)
{  
    return 0;
}

通过以下方式:

php parser.php infile.c outfile.c

我正在考虑如何实现这样的解析器,但我正在努力表达这种行为是如何工作的。

这是我目前的思考过程,这个过程微不足道,但给了我一个开始的地方:

<?php

$infile = $argv[1];
$outfile = $argv[2];

$startFile = file_get_contents($infile);

/* begin transformations */
function transform($t)
{
    /* not sure how to express the transformation */

    return $t;
}

$output = transform($startFile);
/* end of transformations */

file_put_contents('out.c', $outfile); 
?>

我知道包含模式是:

$regex = "/[\/][\/][?](?:\s+)(?:include)(?:\s*)(?:[(]\s*)(?:(?:[\"](.*)[\"])|(?:['](.*)[']))(?:\s*)[)];/";

我该如何做到这一点?

0 个答案:

没有答案