在这个有限状态机下编写Python正则表达式

2024-09-30 01:37:29 发布

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

我正在使用PLY用Python编写Java lexer

我有一个有限状态机:

Regular expression matching state machine

它的目标应该是匹配某些代码中的所有行注释。我想构建一个Python正则表达式,它与这台机器完全一样

我想要找到的正则表达式将被写在一个名为t_IGNORE_LINECOMMENT(t)的方法中,这样,在词法分析时,每一行注释都将被忽略

我发现的所有类似正则表达式都有一些问题,比如

(\/\/[^"\n\r]*(?:"[^"\n\r]*"[^"\n\r]*)*[\r\n]|\/\*([^*]|\*(?!\/))*?\*\/)(?=[^"]*(?:"[^"]*"[^"]*)*$)

这是可以测试的

这个应该匹配每种注释,但也可以匹配"//"/"并且无法匹配hey = "//comment" //comment ",将所有//comment" //comment "作为注释匹配,而不仅仅是//comment

在有限状态机中,我调用A所有字母,当我写A/{x,y}时,我指的是除xy之外的所有字母


Tags: 方法代码机器目标字母commentjavaignore
1条回答
网友
1楼 · 发布于 2024-09-30 01:37:29
(?:[^"]|"(?:[^\"]|\\.)*")*?(//.*?[\r\n])

应该做您想做的事情(给定^{}):它匹配尽可能少的非字符串字符或字符串(本身是任意数量的非引号非转义或转义),后跟//和尽可能少的字符,直到下一个EOL字符。(第一次非贪婪重复是必要的,以使注释尽可能长。)

相关问题 更多 >

    热门问题