编译器帮助(转换矩阵)

时间:2015-04-12 10:09:06

标签: c# compiler-construction

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

if(x=0)
{
x=10;
}

当我开始阅读'('我存储单词"如果",但是在我这样做之后我丢失了角色'('。我能做什么来保持括号? 到目前为止我的代码看起来像这样:

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--; 
} 
}

然后它循环并继续阅读&#39;(&#39;并且不会继续阅读其余的代码。

1 个答案:

答案 0 :(得分:0)

你的代码循环的原因是因为你正在把我移回'('然后for循环让你回到'('。这将无限循环。

示例:

  • 当i = 2时:
    • CurrentChar =='('
      • column = 15
      • i = i-1所以我变成1
  • 循环迭代完成
    • i = i + 1所以我变成了2;
  • 当i = 2时:......

上面的代码说明并不能让我为您的困境提供解决方案。我只能告诉你导致无限循环的原因。

编辑:我能提供的最好的是关于令牌收集的一般知识。当您到达分隔符时,您将需要一个缓冲区用于当前令牌。这是一个粗略的例子(再次,没有更好的澄清,我可以做很少的帮助):

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);
        }
    }
}