Última atividade 2 weeks ago

combinator.cs Bruto
1using System;
2
3public class Program
4{
5 public static void Main()
6 {
7 Func<Func<string, string>, Func<string, string>> grammarFactory = (self) =>
8 {
9 return (input) =>
10 {
11 if (string.IsNullOrEmpty(input))
12 return "";
13
14 if (input.StartsWith("A"))
15 {
16 Console.WriteLine($"[逻辑层] 发现字符 'A',吃掉它。剩余字符串: \"{input.Substring(1)}\" -> 呼叫 self 递归");
17 return self(input.Substring(1));
18 }
19
20 Console.WriteLine($"[逻辑层] 遇到非 'A' 字符 ('{input[0]}'),递归停止。");
21 return input;
22 };
23 };
24
25 Console.WriteLine("--- 构造解析器 ---");
26 Func<string, string> parser = Combinator.Fix(grammarFactory);
27 string testInput = "AAAB";
28 Console.WriteLine($"\n--- 开始解析输入: \"{testInput}\" ---");
29
30 string remaining = parser(testInput);
31
32 Console.WriteLine($"\n--- 解析完成 ---");
33 Console.WriteLine($"原始输入: {testInput}");
34 Console.WriteLine($"剩余部分: {remaining}");
35 }
36}
37
38
39public static class Combinator
40{
41 public static Func<T, R> Fix<T, R>(Func<Func<T, R>, Func<T, R>> f)
42 {
43 return input =>
44 {
45 Func<T, R> self = Fix(f);
46 Func<T, R> actualLogic = f(self);
47 return actualLogic(input);
48 };
49 }
50}