我必须解析一个复杂的字符串格式。实现自动机是一种明智的方法吗?

我目前正在努力解决一个特别令人讨厌的字符串格式,我必须解析它。字符串可以包含表示必须解析的变量属性的子字符串。想象一下像
"ThisExampleStringContainsA[VARIABLE_PROPERTY]"
。此外,这些属性可以任意嵌套,并且它们可以具有不同的含义,取决于上下文。如果
[VARIABLE_PROPERTY]
实际上不是变量的有效名称(当然必须在运行时决定),它只是整个字符串的正常部分,并保持不变和逐字。接下来,没有无效的字符串,因为打开方括号的数量不需要与结束括号的数量相匹配!
This]Is[A[Valid]]][ExampleToo!
。有更多的规则,但这会给你一个想法。 所以,目前我不确定如何处理这个问题。我的第一次尝试以令人难以置信的ifs和elses混乱结束,我越来越注意到解决方案应该包含某种状态概念。现在,我正在考虑越来越多地使用自动机来做到这一点。但是,我遇到的自动机只是纯粹的理论结构。我从未遇到过实际的实现。此外,自动机传统上用于验证单词,即确定它是否属于正式定义的语言。毋庸置疑,我很难想出那种语言的正式定义。 你会怎么做?你认为实际实现自动机是一种理智的方法吗?您如何从OO设计的角度对此进行建模?该项目是在C#中,如果这有任何区别。 你会建议完全不同的东西吗? /编辑: 我的描述可能有点误导,这里有一些更多的细节: 对我来说,问题是以正确的顺序(从最里面到最里面)找到属性。一旦确定了要解决的下一个属性,实际替换及其最终值相对容易。 让我们从上面举例说明,我将给你一个分步示例,说明应该发生什么。 完整的输入字符串是:
This]Is[A[Valid]]][ExampleToo!
第一个右括号和最后一个左括号只是普通字符,因为它们不包含任何内容。对于不在匹配的括号对之间的所有字符也是如此。这让我们留下了
[A[Valid]]]
的部分。必须首先解决最内层的属性,即
[Valid]
。括号只包含属性标识字符串,因此
Valid
是我们要解决的属性的名称。比方说,这个字符串实际上确定了一个属性,并且它被实际值替换,让我们说
Foo
。包含括号的识别字符串被替换,因此
[Valid]
变为
Foo
。 现在,我们必须看看
[AFoo]]
。让我们假装
AFoo
不识别属性,使子串保持不变(包括括号)。 最后,
AFoo
之后的第二个右括号没有匹配的开口括号,因此也只是一个字符。 处理完成后,整个字符串将显示为:
This]Is[AFoo]][ExampleToo!
我希望这个例子让事情变得更加清晰。请记住,我在这里简化了字符串格式!这只是为了让您了解我面临的困难。我不希望工作代码,我正在寻找答案,给我如何解决问题的想法。由于必须对数千个字符串进行此解析,因此解决方案必须具有一些合理的性能。     
已邀请:
普通的旧递归怎么样?看起来很适合这里。     

要回复问题请先登录注册