我该怎么做评论呢?我正在做一名名叫“水布”的口译员。我遇到的一个问题是评论。他们应该长得像这个。然而,我在实现它们时遇到了一些困难。这是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静态main() {println.我试过像这样做t_COMMENT = r"\\\\.*\\\\",但这不起作用,我也试过这样做
def t_COMMENT(t):
r'(/\\(.|\n)*?\\/)|(//.*)'
pass发布于 2021-07-03 10:54:37
我建议您分别在像regex101.com这样的独立网站上测试regex。
下面介绍了一个链接到regex。
我测试了这个字符串来声明注释:
(\\\\(.|\n)*?\\\\)我得到了三支火柴
\\ a multiline
comment \\
print (a)
\\inheritance and polymorphism\\;print ("ab");\\b\\;print("end")即
\\ a multiline
comment \\和
\\inheritance and polymorphism\\和
\\b\\根据regex101的说法,它需要加倍的反斜杠,因为
匹配字符\字面上(区分大小写)
根据regex101的说法,它需要(.|\n)*?,因为
第二捕捉组(.|\n)*? *?匹配以前的令牌之间的零和无限的次数,尽可能少,根据需要展开(懒惰)
发布于 2021-07-01 13:30:38
问题是,*是一个贪婪的匹配,这意味着它将消耗比它需要的更多的东西:例如,假设我们有这行代码\\a\\;print("ab");\\b\\;print("end") --注释令牌将从第一个\\到最后一个\\,以及在使注释令牌看起来像这个糟糕的\\a\\;print("ab");\\b\\之间的所有东西。
使用?在*运算符上将贪婪的运算符转换为懒惰的运算符,这意味着注释令牌将从第一个\\吐出到下一个\\停止,生成令牌并找到另一个注释,最后的输出被分割为2,正如它应该是的那样。1.\\a\\ 2.\\b\\
在这个*上使用*使它变得懒惰,做它想让我做的事情
固定的代码是这个\\\\.*?\\\\,如果您想了解更多关于贪婪和懒惰操作符的详细信息,请访问这个问题。
https://stackoverflow.com/questions/68172611
复制相似问题