【发布时间】:2015-01-06 18:16:04
【问题描述】:
我正在使用一种程序形式验证软件,其中用户定义了一个用 C++ 编写的算法来进行验证。在不过多讨论主题的细节的情况下,我将尝试尽可能清楚地表达我的想法和对它的想法。
如果用户输入了某种形式的内容:
int foo ( [arg1,...,argN] ) {
if ( T_CONDITION ) {
T_EXEC;
}
else {
T_EXEC';
}
}
然后我想得到T_CONDITION和T_EXEC和T_EXEC',形式为Parts = [ COND => T_CONDITION, EXEC => [ T_EXEC, T_EXEC' ] ],其中T_CONDITION是整个条件,T_EXEC是程序在条件下执行的语句如果程序进入else 语句,则为真和T_EXEC'。我认为这被称为“tokenizer”,它是解析器的功能,但我不确定。问题是我对解析器一无所知。问题是我不知道条件和执行从哪里开始或结束,然后我无法处理字符串操作。
一旦我有了 T_CONDITION,我需要以这样的方式分解它以获得几个原子逻辑公式。比如:
T_CONDITION = ( ( A OR N ) OR ( B AND C ) OR ( D AND ( E OR F ) ) )
那我想得到CONDITION_PARTS = [ [ A ], [ N ], [ B , C ], [ D, [ [ E ], [ F ] ] ] ]
这是:如果我得到A or B,那么我需要PART = [[A],[B]],如果我得到A and B,那么我需要PART = [A,B]。但是我如何识别条件的哪一部分属于每个右括号呢?
这可能吗?,我应该使用什么工具来做到这一点?,你知道一些关于这方面的指南吗?
【问题讨论】:
-
不要重新发明轮子:Clang tooling.
-
这不是对特定场外资源的请求(这将是题外话)。这是询问工具的类别是如何命名的,确实有一个客观的答案。您可以看到这一点,因为该问题已经包含一个潜在的(但不正确的)答案“tokenizer”。
标签: c++ parsing token tokenize