使用C#将以C或Lisp或任何一种语言编写的代码解析为数组的好方法?

问题描述

| 使用C#将类似C或类似Lisp的代码解析为数组的好方法是什么? 因此,例如,如下所示的小片段:
if (number > 50) {
    alert(\'Hello,World!\');
}
我希望能够将每个单词和符号存储到一个数组中。 但是到目前为止,我设法输出了如下数组:
[0] if
[1] (number
[2] >
[3] 50)
[4] {
[5] alert(\'Hello,[6] World!\');
[7] }
您在数组位置
1
看到的位置显示
(number
?那不是我真正想要的。我甚至希望将小括号放在其自己的数组位置。 我最初的想法是读取代码的每个字符,然后开始将它们相应地存储到数组中。但这似乎是我在解析字符串时重新发明了轮子。有没有更简单的方法可以做到这一点? ps。我这样做是因为我想学习正确的字符串操作。     

解决方法

        解析C语言有很多规则,您不能简单地用空格字符标记代码。 您需要具有符号概念。令牌
.,- + / * -> ( ) = == != < > <= >= << >> ; ? : \" \' & && | || ~
(等等)都是符号。如果在解析过程中您偶然发现了其中一个,则将其视为单独的令牌,无论接下来的字符是什么。在\“和\'之后,不理会此规则,直到您到达另一个\” / \',除非它在转义字符
\\
之后。还有注释处理,三边形和宏处理,还有许多需要注意的事情。     ,        了解有关fslex和fsyacc的信息。学习抽象语法树,词法分析器和解析器可能是一个很好的起点。 用fslex和fsyacc编写的F#语法分析器也很容易在.NET应用程序中使用。     ,        您可以尝试以首先检查文本是否为某种“东西”的方式来设置解析器,然后相应地对其进行标记化。 对于描述这件事的书,请看一下网上的“计算机程序的结构和解释”(也称为SICP)书,该书已被世界各地的许多大学使用。您可以找到它们用作起点的评估函数的示例。