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)的工作原理相同,并且不会有重复。