我需要编写一个解析器来解析命令。5个这样的命令是:
"a=10"
"b=foo"
"c=10,10"
"clear d"
"c push_back 2"
在第一个示例中,set 是命令,a 是对象,10 是值。
你认为解析器应该为上面的每一行返回什么?
这是我的想法:
"a=10" -> SET (COMMAND_ENUM), INT (VALUE_TYPE), "a", ("10")
"b=foo" -> SET (COMMAND_ENUM), STRING (VALUE_TYPE), "b", ("foo")
这是一个好方法吗?这个问题的标准方法是什么?我应该派人代替吗?
我有一个检查与对象关联的类型的函数。例如,a
上面是类型INT
并且必须分配一个INT
值,否则解析器应该返回或抛出某种错误。我还有一个转换函数,用于将值从字符串转换为所需的类型。如果无法进行转换,则会抛出这些。如果解析器试图将值从字符串转换为所需的类型,那么通过 boost::variant 返回它们可能是个好主意。