如何在 C++ 中解析命令树?

How to parse command tree in C++?

我正在用 C++ 编写一个控制台应用程序,我需要获取类似 shell 的用户命令系统来配置应用程序中的选项。例如,用户可以这样写:

注册 姓名

连接 打开 [远程登录 | ssh]

连接 切换 telnet

发送 文本

连接 切换 ssh

发送 文本

...等等...


所以,很明显我们有一些命令树,在上面的例子中我们有:

--register
|
--connetion
|         |--open
|         |--switch
|
--send

每个命令可以有不同数量的参数。


问题:

现在我用正则表达式来解析,但是这个方案真的很丑。我读过有关 YACC 和 LEX 的资料,但我不确定使用它是否是一个真正的好主意。

是否有一些广泛使用的方法来解析命令树?我对词法分析理论不是很了解,所以如果你能不学术地回答我将不胜感激。

如果您可以使用 GNU C 库,

This 是一个很好的资源,有几个选项。

最后你会想要切换每个 arg,你可能需要跟踪你的嵌套命令的一些状态。

使用您的示例 arg 树:

switch (arg)
{
    case "register":
    {
        register = 1;
        break;
    }
    case "connection":
    {
        connection = 1;
        break;
    }
    case "open":
    {
        if (previousCommand == "connection")
            connectionOpen = 1;
        else
            //error
        break;
    }
    case "switch":
    {
        if (previousCommand == "connection")
            connectionSwitch = 1;
        else
            //error
        break;
    }
    case "send":
    {
        send = 1;
        break;
    }
    previousCommand = arg;
}