我正在阅读一个文件说 xc,我必须找到字符串“shared”。一旦找到这样的字符串,就必须执行以下操作。
例子:
shared(x,n)
输出必须是
*var = &x;
*var1 = &n;
指针可以是任何名称。输出必须写入不同的文件。这个怎么做?
我正在为使用 lex 和 yacc 的并发平台开发源到源编译器。这可以是用 C 编写的例程,或者如果你可以使用 lex 和 yacc。有人可以帮忙吗?谢谢。
如果如您所说,参数只能是变量而不是任何其他表达式,那么有几个简单的解决方案。
一种是使用正则表达式,并使用非常简单的正则表达式对整个文件进行简单的搜索/替换。
另一种是简单地将整个源文件加载到内存中,使用strstr
for搜索"shared("
,然后使用 egstrtok
获取参数。将其他所有内容逐字复制到目的地。
利用 C 预处理器。
把它放在文件的顶部
#define shared(x,n) { *var = &(x); *var1 = &(n); }
并通过cpp
. 这也将包括外部资源并替换所有宏,但您可以简单地#something
从代码中删除所有行,使用注入的预处理器规则进行转换,然后重新添加它们。
顺便说一句,为什么不在头文件中设置一个简单的宏供开发人员包含?
一个疑问:var
从哪里来var1
?
编辑:如 johnchen902 所示更正
当涉及到预处理器时,我会这样做:
#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 */ }