C# 编译器帮助(转换矩阵)

C# 编译器帮助(转换矩阵),c#,compiler-construction,C#,Compiler Construction,在我的编程语言中,我有一个包含所有转换的矩阵。 假设我有以下代码: 当我开始读“(”时,我会存储单词“if”,但在读完之后,我会丢失字符“(”。我如何才能保留括号?? 到目前为止,我的代码如下所示: for (int i = 0; i <Code.Length ; i++) { char CurrentChar= code[i]; for (int j = 0; j < Chars.Length; j++) { if (CurrentChar == '(') { column=

在我的编程语言中,我有一个包含所有转换的矩阵。 假设我有以下代码:

当我开始读“(”时,我会存储单词“if”,但在读完之后,我会丢失字符“(”。我如何才能保留括号?? 到目前为止,我的代码如下所示:

for (int i = 0; i <Code.Length ; i++)
{
char CurrentChar= code[i];
for (int j = 0; j < Chars.Length; j++)
{ 
if (CurrentChar == '(')
{ 
column= 15;
i--; 
} 
}

for(int i=0;i您的代码循环的原因是因为您将i移回“(”之前,然后for循环将您移回“(”。这将无限循环

例如:

  • 当i=2时:
    • CurrentChar=='('
      • 列=15
      • i=i-1,所以我变成了1
  • 循环迭代完成
    • i=i+1,所以i变成2
  • 当i=2时:
您上面的代码描述并不能让我为您的困境提供解决方案。但是,我只能告诉您是什么导致了无限循环

编辑:我所能提供的最好信息是我对代币收集的一般了解。您需要为当前代币提供一个缓冲区,当您到达分隔符时,该缓冲区会被保存下来。下面是一个粗略的示例(同样,没有更好的说明,我也无能为力):

使用系统;
使用System.Collections.Generic;
使用系统文本;
公共课程
{
公共静态void Main(){
变量代码=@“如果(x=0)
{
x=10;
}";
var tokens=新列表();
var token=新的StringBuilder();
for(int i=0;i
这段代码应该做什么还不清楚。我需要做的是创建我的tokens表,所以我只键入了括号的一部分。@CarlosApple如果你告诉我们如何存储
如果
也许我们可以告诉你如何存储
也可以。不,如果CurrentChar='('然后我想用它的标记值保存它。我的意思是,当我读取单词时,如果我的“i”值是2,(这是'('位置的值),那么我存储单词if,但是当我再次查看时,我会丢失括号,因为我的值将是3…(对应于字母x)
for (int i = 0; i <Code.Length ; i++)
{
char CurrentChar= code[i];
for (int j = 0; j < Chars.Length; j++)
{ 
if (CurrentChar == '(')
{ 
column= 15;
i--; 
} 
}
using System;
using System.Collections.Generic;
using System.Text;

public class Program
{
    public static void Main(){
        var code = @"if(x=0)
{
x=10;
}";
        var tokens = new List<string>();
        var token = new StringBuilder();
        for(int i = 0; i < code.Length; i++)
        {
            char CurrentChar = code[i];
            if(CurrentChar == '(')
            {
                tokens.Add(token.ToString());
                token = new StringBuilder();
            }
            // Do checks for other tokens
            else
            {
                token.Append(code[i]);
            }
        }
        foreach(var tkn in tokens)
        {
            Console.WriteLine(tkn);
        }
    }
}