我有一个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文字,或类似的东西?
1条答案
按热度按时间uxh89sit1#
我正在寻找的是一种使用JavaScript RegExp实现这种字符串检查的方法。
这是不可能的
你可以做的是使用定义ANTLR本身的ANTLR grammar并生成JavaScript解析器。然后可以使用该解析器来解析包含
call
和expr
规则的语法。然后可以使用生成的解析树来发现哪个规则引用了其他哪些规则。