我如何在PLY中进行评论

2024-04-24 16:21:35 发布

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

如何在ply中进行评论。我正在做一个名为calico的翻译。我遇到的一个问题是评论。它们应该是\\这个\\。但是,我在实现它们时遇到了一些困难。这是印花布的源代码

...
\\inheritance and polymorphism\\;
public class Main(){
    public static main() {
        println("test"); \\hello world\\;
        me = class Person(11, "a", "b", "11/09/09"); \\objects\\;
        println(me.get_details());
        me.tax(); \\encapsulation\\;
        println(me.get_details());
        me2 = class Employee(11, "a", "b", "11/09/09", "n", "11/09/35", 1000)
    }
};

注释标记应如下所示\\继承和多态\\,但它应如下所示\\继承和多态\\;公共类Main(){public static Main(){println。。。 我试过这样做t_COMMENT = r"\\\\.*\\\\"但是没有用,我也试过这样做

def t_COMMENT(t):
    r'(/\\(.|\n)*?\\/)|(//.*)'
    pass


Tags: get源代码maincomment评论staticinheritancepublic
2条回答

问题是*是一个贪婪的匹配,这意味着它将消耗比它需要的更多:例如,假设我们有这行代码\\a\\;print("ab");\\b\\;print("end")注释标记将从第一个\\到最后一个\\吐出,并且在这两者之间的所有东西都使注释标记看起来像这样\\a\\;print("ab");\\b\\,这是不好的

使用*操作符上的?将贪婪操作符转换为懒惰操作符,这意味着注释标记将从第一个\\到下一个\\停止生成标记并找到另一个注释,最终输出被拆分为2,就像它应该的那样。1.\\a\\2.\\b\\

在这个*上使用?会让它变得懒惰,做它想让我做的事

固定代码是\\\\.*?\\\\,如果您想了解有关贪婪和懒惰运算符的更多详细信息,请访问此question

我建议你单独测试你的正则表达式,在一个独立的网站上,比如regex101.com

下面是一个描述如下的link to the regex

我测试了此字符串以声明注释:

(\\\\(.|\n)*?\\\\)

而且我能为我的球队赢得三场比赛

\\ a multiline
comment \\
print (a)
\\inheritance and polymorphism\\;print ("ab");\\b\\;print("end")

\\ a multiline
comment \\

\\inheritance and polymorphism\\

\\b\\

根据regex101,它需要双反斜杠,因为

\ matches the character \ literally (case sensitive)

根据regex101,它需要(.|\n)*?,因为

2nd Capturing Group (.|\n)*?

*? matches the previous token between zero and unlimited times, as few times as possible, expanding as needed (lazy)

相关问题 更多 >