我如何做评论在ply。我正在用PLY做一个名为calico的翻译器。我遇到的一个问题是评论。它们应该看起来像\\\\this\\\\
。但是,我在执行它们时遇到了一些麻烦。下面是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)
}
};
注解标记看起来应该是这样的\\\\inheritance and polymorphism\\\\
,但实际上它看起来像这样的继承和多态性; public class Main(){ public static main(){ println...我试过这样做t_COMMENT = r"\\\\.*\\\\"
,但没有工作,我也试过这样做
def t_COMMENT(t):
r'(/\\(.|\n)*?\\/)|(//.*)'
pass
2条答案
按热度按时间htzpubme1#
问题是
*
是一个贪婪的匹配,这意味着它会消耗比它需要的更多:例如,假设我们有这行代码\\a\\;print("ab");\\b\\;print("end")
,注解标记将从第一个\\
吐出到最后一个\\
,以及中间的所有内容,使注解标记看起来像\\a\\;print("ab");\\b\\
,这是不好的。在
*
操作符上使用?
,将贪婪操作符转换为懒惰操作符,这意味着注解标记将从第一个\\
到下一个\\
停止,使标记并找到另一个注解,最终输出被分成2,就像它应该的那样。1.\\a\\
2.\\b\\
在这个
*
上使用?
会使它变得懒惰,做它想让我做的事情修正的代码是这个
\\\\.*?\\\\
,如果你想了解更多关于贪婪和懒惰运算符的细节,就来看看这个问题吧o2rvlv0m2#
我建议您单独测试正则表达式,在像
regex101.com
这样的独立网站中下面是一个link to the regex。
我测试了这个字符串来声明注解:
我找到了三个匹配的
即
和/或
和/或
根据regex 101,它需要双反斜杠,因为
“匹配字符”(区分大小写)
根据regex 101,它需要
(.|\n)*?
,因为第2集(第2集)|\n)*?