如何检查字符串数组中的匹配项

2024-10-01 15:41:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个语义分析器,我需要知道代码中什么时候有函数。我知道一个函数以一个id开始,然后有一个'(' 所以,在我的元素数组中,我有:

['id', '(', ')', '{', 'id', '(', 'lit-str', ')', ';', 'id', '(', 'lit-str', ')', ';', 'id', '(', '!', 'lit-int', ')', ';', 'id', '(', ')', ';', '}']

所有“id”后跟“(”都是函数。所以,我需要找到所有的眼点。有什么方法可以找到所有这些“id”和“(”来计算它们吗?你知道吗

不是所有的代码都完全相同,有些更大。你知道吗

我曾经试过,如果

(if 'id' + '(' in array: print(count))

但这只算第一次。你知道吗


Tags: 方法函数代码inid分析器元素if
2条回答

您只需对列表进行迭代即可。更复杂的解决方案是使用正则表达式。你知道吗

当问题被提出时,for循环看起来是最简单的解决方案。您需要同时迭代两个元素。你知道吗

这里,一个简单的解决方案返回索引列表,其中元素id后跟以(开头的元素:

# Your input data
input_list = ['id', '(', ')', '{', 'id', '(', 'lit-str', ')', ';', 'id', '(', 'lit-str', ')',
              ';', 'id', '(', '!', 'lit-int', ')', ';', 'id', '(', ')', ';', '}']


def getFunction(input_list):
    # List that will collect the index of 'id' followed by '('
    index_list = []
    print(input_list)
    for i, mot in enumerate(input_list[:-1]):
        # Also check if input_list[i+1] is defined
        if mot == 'id' and input_list[i+1] and input_list[i+1][0] == '(':
            index_list.append(i)

    return index_list

print(getFunction(input_list))
# [0, 4, 9, 14, 20]

希望对你有帮助!你知道吗

如果我能理解你所说的问题,我会用一个类似于https://stackoverflow.com/a/21303286/2860127

num_functions = 0
for left_token, right_token in zip(tokens, tokens[1:]):
    if left_token == "id" and right_token == "(":
        num_functions += 1
print("I found {} function calls/definitions.".format(num_functions))

尽管这取决于您如何实现语义分析器,但一个更全面的系统需要使用来自当前标记的索引,就像alexandreb.所拥有的那样。你知道吗

我不同意Alexandre B.和Green斗篷Guy的观点-正则表达式适用于解析器,这是编译器在进行语义分析之前的步骤,可以找出输入中的“单词”(例如,将特定名称“foo”转换为“id”)。
另一方面,语义分析需要确保输入符合语言的语法,这是一种上下文无关的语法,因此我们需要比regex更强大的东西。递归可能是一种很好的方法。你知道吗

相关问题 更多 >

    热门问题