regex JavaScript递归/循环正则表达式

2ledvvac  于 2023-04-07  发布在  Java
关注(0)|答案(1)|浏览(136)

我有一个ANTLR4语法文件,其中有一对循环依赖的规则,如果你可以这样称呼它们的话。下面是这些规则:

call
    : ID LPAREN (expr (COMMA expr)*)? RPAREN 
    ;

expr
    : operand
    | call
    | NOT expr
    | expr (AND|OR|ADD|SUB|MUL|DIV) expr
    | expr LSQUARE expr RSQUARE
    ;

call引用expr,而expr引用call。我正在寻找的是一种使用JavaScript RegExp实现这种字符串检查的方法。对于expr规则来说,拥有某种递归RegExp也会有所帮助,但有些东西告诉我,无论什么可以解决循环依赖问题,也会解决递归问题。如果它存在,那就是:)
我试过:

  • 在regexp中使用(?R)?,但JavaScript的RegExps似乎没有此功能
  • 使用XRegExp.matchRecursive,但是,从API描述和我使用它得到的内容来看,它并不是我想要的
  • 创建我自己的自定义RecursiveRegExp类,使用一个重写的构造函数和exec()方法,但似乎我对JS的熟练程度不足以完成这样的事情:)

有没有一种方法,也许,插入一个“链接”到另一个RegExp到一个RegExp文字,或类似的东西?

uxh89sit

uxh89sit1#

我正在寻找的是一种使用JavaScript RegExp实现这种字符串检查的方法。
这是不可能的
你可以做的是使用定义ANTLR本身的ANTLR grammar并生成JavaScript解析器。然后可以使用该解析器来解析包含callexpr规则的语法。然后可以使用生成的解析树来发现哪个规则引用了其他哪些规则。

相关问题