c# - 使用 C# 将代码(以类 C 或类 Lisp(或任何)语言编写)解析为数组的好方法?

标签 c# string

使用 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?那不是我真正想要的。我什至想把那个小括号放在它自己的数组中位置。

我最初想做的是读取代码的每个字符,然后开始将它们相应地存储到数组中。但这似乎是我在解析字符串时重新发明轮子。有没有更简单的方法来做到这一点?

附注我这样做是因为我想学习正确的字符串操作。

最佳答案

C语言的解析规则很多,不能简单的把代码用空白字符分词。

您需要了解符号的概念。代币 . , - + / * -> ( ) = == != < > <= >= << >> ; ? : " ' & && | || ~ (等等)都是符号。如果在解析过程中您偶然发现其中一个,则将其视为单独的标记,而不管下一个字符是什么。在 "和 ' 之后忽略此规则,直到你遇到另一个 "/',除非它在转义字符 \ 之后.还有注释处理、三字母组合和宏处理,以及更多需要注意的事情。

关于c# - 使用 C# 将代码(以类 C 或类 Lisp(或任何)语言编写)解析为数组的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6316847/

相关文章:

c# - RedirectToRoute 导致重定向循环

C:怪串现象

java - java - 如何将xml Element及其子节点转换为Java中的String?

Java - 检查 STRING 是否仅包含某些字符的最佳方法是什么?

c# - 通过 USB 与 PC 通信

c# - String.comparison 性能(带修剪)

c++ - 这段 C 代码有什么问题?我想知道输入字符串中 1 的个数

c - 将 char[] 添加到 char**(将字符串添加到字符串列表)

c# - 为什么循环会跳过数据表中的最后一行?

c# - 检查 EF 语句中的空实体