我有一段时间,如果,ifif语句在一个文件中有多个条件...它是一个C语言...下面提到的格式是所有多个条件的标准.所以不用担心压力.只有问题是检查有多少条件,并根据我描述的输出格式列出....例如,如果我的C文件有代码...
while( condition1 && condition2 || condition3 ) { #statements; }
我想计算内部有多少条件,我的输出应该是
这样的......
while( 1 condition1 && 2 condition2 || 3 condition3 ) { #statements; }
我写了代码,它适用于简单的...我的代码....
open(A,"e:\\a\\a.txt")or die; @a=; close(A); $count=1; for($i=0;$i但对于复杂的条件,如
while( ( condition1 && condition2 && condition3 ) || ( condition4 || condition5 && condition6 ) { #statements; }我得到的输出像
while( ( 1 condition1 && 2 condition2 && condition3 3 ) || ( 4 condition4 || 5 condition5 && condition6 )这是不希望的....我的意图是计算所有条件,无论它复杂多少.....请帮助我...
期望的输出可能是
而((1条件1 && 2条件2 && 3 condition3)||(4 condition4 || 5 condition5 && 6 condition6)),因为它采用了内部6个条件...因此所述的用于任何情况.
1> tsee..:这是什么语言?这种语言是否有完整的解析器?如果是这样,我建议你使用它们.如果没有,我认为你很难可靠地解决这个问题.您的方法依赖于程序员格式化其代码的特定方式.
当你为你的例子解决问题时,有人会向你抛出以下内容:
while( ( condition1 && condition2) && condition3 ) || ( condition4 || condition5 && condition6 ) { #statements; }如果你坚持编写自己的模拟解析器,那么我建议如下:
不要按行解析.随意阅读行.但是不要分别解析每一行.
在while之后提取匹配的括号组的内容.这里的线索是" 匹配 ".运行"perldoc -q matching"并查看有关解析匹配/嵌套括号的第一个Perl FAQ条目.
如果括号中包含代码,请尝试通过拆分逻辑运算符来提取逻辑运算符的操作数.
如果操作数(conditionX)可能包含包含例如"&&"的字符串,则绝望.
您可能会发现按照复杂程度有用的工具:
perldoc -q如上所述嵌套
的文本::平衡模块(现成可用的任何perl的版本> = 5.8)
来自CPAN 的Parse :: Yapp和Parse :: RecDescent解析器生成器模块.Yapp未被记录,但没有遭受P :: RD遭受的一些病理问题.
Parse :: Eyapp可能结合了上述两个模块的优点.