3

我有作为输入文本块的命令和参数,每行一个,例如

XYZ ARG1,ARG2,ARG3,...,ARGN

我想验证该XYZ特定命令的参数格式是否正确,如果是,则执行正确的代码块。有大约 100 个命令,其中一些具有可变数量的参数、不同的关系(即,如果XYZ调用了命令,那么我也需要ABC调用命令)。

还存在命令,例如:

COMMAND
XYZ ARG1
BEF ARG1 ARG2
ENDCOMMAND

文本包含在COMMAND和中很重要ENDCOMMAND

通常对于这样的事情,我会使用 Lex 和 Yacc 而不是正则表达式,但是还有什么更现代的吗?代码是用 C# 编写的。MSDN 中有什么可以做到这一点,而不是老式的 C Lex 和 Yacc?

4

6 回答 6

5

如果您正在寻找 Lex/Yacc 的替代品,请查看ANTLR。它支持各种语言的代码生成,包括 C#

于 2009-05-06T22:28:14.277 回答
4

ANTLR可以处理词法分析和解析,它可以生成 C#(除了 Java、C++ 和 Python)。它非常成熟,有大量文档和大量示例。它还生成比 YACC 更好的错误消息。

于 2009-05-06T22:29:27.050 回答
1

你有一个比“年龄”更大的问题,因为我不确定任何著名的 C-ish 编译器编译器都可以与 C# 一起使用。Boost 新奇的解析模板也是如此。

你可能不得不使用像GrammaticaSpart这样深奥的东西(选择我的前两个谷歌热门歌曲

编辑:多看几眼后,似乎ANTLR支持 C#。ANTLR 非常有名,而且比 LEX/YACC 更新很多,所以我建议你去看看。

于 2009-05-06T22:19:46.403 回答
1

对于这样一个简单的解析问题,您可以编写一个递归下降解析器。当然,假设您的语言是相对固定的,并且不会发展成为完整的编程语言。如果有任何危险,请咬紧牙关并使用 ANTLR 或同等产品。

于 2009-05-11T06:41:37.703 回答
1

看看 jay,yacc 重新定位到 C# 和 Java。它包含在单声道项目中。

http://code.google.com/p/jayc/

于 2009-06-26T09:41:11.380 回答
0

.NET Framework 中没有什么特别之处,如果你是这个意思的话。

乍一看,您的命令结构看起来相对简单,因此手动解析非常适合这里,而且它几乎总是快速的解决方案。这也将允许您检查命令参数的实际值的正确性,而不仅仅是它们的语法有效性。

于 2009-05-06T22:25:21.180 回答