1

我正在阅读一个文件说 xc,我必须找到字符串“shared”。一旦找到这样的字符串,就必须执行以下操作。

例子:

shared(x,n)

输出必须是

*var = &x;
*var1 = &n;

指针可以是任何名称。输出必须写入不同的文件。这个怎么做?

我正在为使用 lex 和 yacc 的并发平台开发源到源编译器。这可以是用 C 编写的例程,或者如果你可以使用 lex 和 yacc。有人可以帮忙吗?谢谢。

4

3 回答 3

1

如果如您所说,参数只能是变量而不是任何其他表达式,那么有几个简单的解决方案。

一种是使用正则表达式,并使用非常简单的正则表达式对整个文件进行简单的搜索/替换。

另一种是简单地将整个源文件加载到内存中,使用strstrfor搜索"shared(",然后使用 egstrtok获取参数。将其他所有内容逐字复制到目的地。

于 2013-05-06T14:05:14.887 回答
0

利用 C 预处理器。

把它放在文件的顶部

#define shared(x,n) { *var = &(x); *var1 = &(n); }

并通过cpp. 这也将包括外部资源并替换所有宏,但您可以简单地#something从代码中删除所有行,使用注入的预处理器规则进行转换,然后重新添加它们。

顺便说一句,为什么不在头文件中设置一个简单的宏供开发人员包含?

一个疑问:var从哪里来var1

编辑:如 johnchen902 所示更正

于 2013-05-06T13:28:56.220 回答
0

当涉及到预处理器时,我会这样做:

#define shared(x,n) (*var=&(x),*var1=&(n))

为什么我认为它比 esseks 的答案更好?假设这种情况:

if( someBool )
    shared(x,n);
else { /* something else */ }

在esseks的回答中,它将变成:

if( someBool )
    { *var = &x; *var1 = &n; }; // compile error
else { /* something else */ }

在我的回答中,它将变成:

if( someBool )
    (*var=&(x),*var1=&(n)); // good!
else { /* something else */ }
于 2013-05-06T13:35:49.903 回答