Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何允许用户在my CLI中定义变量?_C_Command Line Interface - Fatal编程技术网

如何允许用户在my CLI中定义变量?

如何允许用户在my CLI中定义变量?,c,command-line-interface,C,Command Line Interface,我用C编写了一个简单的CLI,它理解四条基本指令:两个数字的加法、减法和乘法,以及退出 我可以在提示符后键入类似add4,5的内容,它工作得非常好。但是我希望用户能够定义变量并在以后使用它们。我的意思是,用户输入myvar=myobjparam_1、param_2,然后输入mymethodmyvar,一切都正常 我怎么能得到这个 编辑: 最后,我使用了Troy Hanson用C编写的uthash库,您可以在 谢谢您的回答。第一部分是解析如何识别输入中的名称,第二部分:如何存储和管理变量 关于解析

我用C编写了一个简单的CLI,它理解四条基本指令:两个数字的加法、减法和乘法,以及退出

我可以在提示符后键入类似add4,5的内容,它工作得非常好。但是我希望用户能够定义变量并在以后使用它们。我的意思是,用户输入myvar=myobjparam_1、param_2,然后输入mymethodmyvar,一切都正常

我怎么能得到这个

编辑:

最后,我使用了Troy Hanson用C编写的uthash库,您可以在


谢谢您的回答。

第一部分是解析如何识别输入中的名称,第二部分:如何存储和管理变量

关于解析。如果您的解析器非常简单,只需在应该识别整数的地方进行一些额外的检查,如果不识别,请在变量存储中按名称查找值,如下所示。按照编译器/解释器的说法,建议使用一些正则表达式将输入拆分为有意义的词素


关于存储。您需要一种结构,该结构允许通过项目名称轻松快速地访问项目,并支持添加和删除条目。这是由一个映射或哈希表处理好的,在C标准库中没有Stdad映射实现,在C++中就足够了。对于少量变量,可以使用一个数组或一个结构变量{const char *name;ValdaaTyt var;}的列表,尽管查找可能会越来越慢,可以考虑二进制搜索来增强这一点。p> 您需要名称到值的映射、字典或散列。这实际上取决于命令行的解析器。在某些情况下,使用一些正则表达式来识别符号就足够了,在另一些情况下,如果您计划对输入表达式执行mini-AST,则需要进行更精确的处理。映射解决方案非常好,您可以使用一个集合来存储所有参数,而不必像shell一样重复每个句子。然后用set一个接一个地删除,用map处理,反馈交互。这是简单的代码编写和易于维护。谢谢。事实上,我没有使用正则表达式来解析命令,而是使用strtok来拆分命令,因为它需要更少的代码。我想我可以在以后更改它,以保证命令的语法。为了使用这个想法,我将阅读有关哈希表的内容。