当前位置:  开发笔记 > 编程语言 > 正文

如何计算Perl中if,elseif或while中使用的逻辑条件数?

如何解决《如何计算Perl中if,elseif或while中使用的逻辑条件数?》经验,为你挑选了1个好方法。

我有一段时间,如果,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可能结合了上述两个模块的优点.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有