C# 用C语言解析复杂文本文件#

C# 用C语言解析复杂文本文件#,c#,file,parsing,C#,File,Parsing,我需要解析一个包含很多级别和字符的文本文件。我一直在尝试不同的方法来解析它,但我一直没有得到任何工作。我已经包括了我正在处理的文本文件的一个示例。对如何解析此文件有什么建议吗 我已经用TEXTINEED表示了我需要的文件部分 (bean name: 'TEXTINEED context: (list '/text '/content/home/left-nav/text '/content/home/l

我需要解析一个包含很多级别和字符的文本文件。我一直在尝试不同的方法来解析它,但我一直没有得到任何工作。我已经包括了我正在处理的文本文件的一个示例。对如何解析此文件有什么建议吗

我已经用TEXTINEED表示了我需要的文件部分

(bean name:
       'TEXTINEED
       context:
       (list '/text
             '/content/home/left-nav/text
             '/content/home/landing-page)
       type:
       '/text/types/text
       module:
       '/modules/TEXTINEED
       source:
       '|moretext|
       ((contents
          (list (list (bean type:
                             '/directory/TEXTINEED
                             ((directives
                                (bean ((chartSize (list 600 400))
                                        (showCorners (list #f))
                                        (showColHeader (list #f))
                                        (showRowHeader (list #f)))))))
                      (bean type:
                             '/directory/TEXTINEED
                             ((directives
                                (bean ((displayName (list "MTD"))
                                        (showCorners (list #f))
                                        (showColHeader (list #f))
                                        (showRowLabels (list #f))
                                        (hideDetailedLink (list #t))
                                        (showRowHeader (list #f))
                                        (chartSize (list 600 400)))))))
                      (bean type:
                             '/directory/TEXTINEED
                             ((directives
                                (bean ((displayName (list "QTD"))
                                        (showCorners (list #f))
                                        (showColHeader (list #f))
                                        (showRowLabels (list #f))
                                        (hideDetailedLink (list #t))
                                        (showRowHeader (list #f))
                                        (chartSize (list 600 400))))))))

您可以考虑编写一个状态机实现,它根据文件中遇到的不同令牌来改变状态。我发现基于状态的解析器非常容易编写和调试。最困难的部分可能是定义您使用的令牌。

看起来您偶然发现了一个不错的文件,也称为代码。它看起来很复杂,但实际上很容易解析。事实上,如果你不想学习很多关于Lisp的知识,你可以学习这些,其中的一小部分就是为这样的文件编写解析器。但这对你来说可能太过分了

相反,您应该使用已经可用的S表达式解析器,这是一个具有for.NET的项目,您应该能够使用它们的代码或它们的项目来解析文件

lispy要做的事情是将文件作为lisp程序读取,这样您就可以执行它而不是“解析”它。因此,另一种选择是只编写一个小的lisp程序,将文件转换成在C#(可能是XML?)中更自然的文件

作为参考,这里有另一篇关于

编辑


是一个用c语言编写的方案解释器(大约1000 loc)。您对
读取和相关过程感兴趣。这使用了一个非常简单的sexpression正向解析到一个c结构树中,您应该能够将其改编成c#没问题。

使用像ANTLR这样的解析器生成器。它采用类似于EBNF的语法描述,并使用您选择的语言创建解析器代码。

一种方法是从辅助解析开始,如中所述。然后逐个字符处理文件。这就是我为几个类所做的。

我使用OMeta为C编写了一个S表达式解析器。可于


看看你的S表达式变体,你只需要将我对字符串的定义(以双引号开头和以双引号结尾)改为单引号,并为结尾包含冒号的元素添加定义(我假设这些元素是字典)。

好吧,你已经试过什么了?到底是什么问题?看起来像是一个通用的S-Expr解析的东西,网络上可能已经有一些东西在做这件事了……看起来确实有点奇怪,如果你知道是什么工具生成了这个文件,那么单引号不是结束单引号可能会有所帮助。