解析时(Java 中的 ANTLR4)我应该什么时候解析别名?
我有一个简单的“bash”外观 DSL(与管道连接的命令),类似于command1 | command2 | ...
一组预定义的命令。我想给用户一个选项来定义自定义别名,比如alias com='command2 | command3'
(bash 风格)。然后用户应该能够在command1 | com
相当于command1 | command2 | command3
.
我应该这样做(别名解析):
在用户提供的原始输入文本上。即在词法分析/解析之前将字符串更改
command1 | com
为,command1 | command2 | command3
在我从词法分析中得到令牌之后,
在构建解析树时,
或者当我遍历它(执行命令)?
1) 似乎不是一个好方法,因为我对传入的字符串一无所知,替换别名将是一场噩梦。2)可能并不容易。我想我记得 3) 完全不是一个好方法,但我的记忆可能只是在欺骗我。这将导致我最初的猜测 - 选项编号 4)。我对此是正确的还是我错过了什么?我唯一担心的是别名本身可以是一个小查询,所以我还必须在别名解析期间解析它,但这应该可行吗?