我想使用字符串中的类似结构的函数来发出命令。例如我有三个功能:
go() do() hello()
Run Code Online (Sandbox Code Playgroud)
而且这些函数的主体也可以包含相同的函数。
"go(){do(){go}} do()"
Run Code Online (Sandbox Code Playgroud)
这些函数也可以使用参数。我怎样才能在正则表达式中做到这一点。这就像创建一种编程语言。
基本上,这些不是方法,而是都是从同一个抽象类实现的类。每个类都有一个由相同类的列表类型组成的参数。我的意图就像一个接受括号的计算器。
5* (2+5-(5*9))
我的命令可能会变得复杂:
go(true, 4){do(), hello(){go(){}}
Run Code Online (Sandbox Code Playgroud)
如果您想解析具有未定义递归深度的递归语言,则不能使用仅解析常规语言并使用确定性有限自动机实现的正则表达式。
使用像ANTLR这样支持非常规语法的解析器生成器。它包括各种现有编程语言的语法文件,您可以将其用作解析您自己的语言的示例。
更新:
如果这对于您想要做的事情来说似乎太大或太多,您可以在循环中调用正则表达式替换并从内到外解析嵌套结构。伪代码:
while true:
search any innermost bracket pair (that doesn't contain nested brackets) with regex
if found:
parse content of innermost bracket pair
remove bracket and its content from input or substitute with something w/o brackets
else:
parse content of remaining input
exit loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |