Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测脚本中未声明的变量_C#_Parsing_Variables - Fatal编程技术网

C# 检测脚本中未声明的变量

C# 检测脚本中未声明的变量,c#,parsing,variables,C#,Parsing,Variables,我正在使用自定义脚本来自动化这些过程。(实际上是在学习)。这是剧本 var a=5; var b=55; 返回a+b; 我只是将源代码转换为C#,并使用CSharpCodeProvider类进行编译。我目前正在将其转换为令牌,这是我的令牌枚举 公共枚举令牌 { 返回, 新线,, 空白, VAR, 单词 符号, 整数 } 我成功地得到了这些代币 VAR, WHITESPACE, WORD, WHITESPACE, INTEGER, SYMBOL NEWLINE, VAR, WHITESPACE

我正在使用自定义脚本来自动化这些过程。(实际上是在学习)。这是剧本

var a=5;
var b=55;
返回a+b;
我只是将源代码转换为C#,并使用CSharpCodeProvider类进行编译。我目前正在将其转换为令牌,这是我的令牌枚举

公共枚举令牌
{
返回,
新线,,
空白,
VAR,
单词
符号,
整数
}
我成功地得到了这些代币

VAR, WHITESPACE, WORD, WHITESPACE, INTEGER, SYMBOL
NEWLINE,
VAR, WHITESPACE, WORD, WHITESPACE, INTEGER, SYMBOL
NEWLINE
NEWLINE
RETURN, WHITESPACE, WORD, SYMBOL, WORD, SYMBOL
我目前正在尝试查找未声明的变量,并自己声明它们。我尝试将每个
单词添加到变量列表中,并将其添加到脚本中,但它会得到重复的声明

我希望它也能验证

a = 5;
var b = 55;

return a+b;
i、 e只为没有var关键字的事物添加声明

我怎样才能解决这个问题

谢谢

编辑:

下面是我如何解析源代码的

List<Token> tokensList;
List<string> variables;

for (int i=0; i<tokensList.Count; i++)
{
    Token token = tokensList[i];

    switch (token.TokenType)
    {
        case WORD:
            variables.Add(token.Value);
            break;
    }
    result.Append(token.Value);
}
列出令牌列表;
列出变量;
对于(int i=0;i您可以将“result”声明为字典(=hash),而不是列表

在这种情况下,它不能有重复项

或者, 替换:

   result.Append(token.Value);
与:

if (!result.Contains(token.Value)) 
        result.Append(token.Value);

你所说的未声明变量是什么意思?脚本中的所有变量都已声明。只是想达到同样的效果。使用distinct删除重复项?@Vincenzo我该怎么做?@SriHarshaChilakapati你可以将其放在字典而不是列表中,在这种情况下,它不能有重复项。或者,替换为:“result.Append”(token.Value);“with:if(!result.Contains(token.Value))result.Append(token.Value);Yep.result是一个StringBuilder对象。我不想在要添加的var关键字之后添加变量。您好,如果将其定义为字符串,则此语法(.Contains)的工作原理相同,并且不会有重复。