标签: code-analysis

语法分析问题

在学校,我们被分配设计一种语言,然后实施它,(我实现它很有趣=)).我的老师告诉我们使用yacc/lex,但我决定使用java + regex API,这就是我设计的语言的样子:

Program "my program"
var yourName = read()
if { equals("guy1" to yourName) }
  print("hello my friend")
else
 print("hello extranger")
end
Program End
Run Code Online (Sandbox Code Playgroud)

好吧,正如你所看到的,它是一种非常基本的语言=).

我以为我可以以一种非常OOP的方式实现它,比如创建一个抽象类Sentence然后有子类等VariableAssignment,IfSentence并且有一个Program只有一堆句子的类吧?然后eval在所有Sentences 上调用一个抽象方法,所以我最初编译语言的方法只包括两个阶段:

  1. 确定seach行的语法
  2. 为每一行创建对应类

当然,如果在任何阶段出现问题,Ii都可能引发错误.

我的问题是,我做错了吗?我应该像理论一样(词汇,句法,语义)来讨论所有阶段吗?我应该继续使用我天真的两阶段编译器吗?

java code-analysis compiler-theory

1
推荐指数
2
解决办法
1536
查看次数

任何推荐的Delphi代码导航工具?

任何人都可以推荐一个好的Delphi源代码导航和分析工具,它可以实现代码浏览,显示类层次结构和evtl.有编辑选项吗?我尝试了Code-Navigator,它非常快,但在复杂的依赖项中它有点不稳定.

navigation delphi code-analysis

1
推荐指数
1
解决办法
1173
查看次数

这个算法没有二次运行时间吗?

我最近接受了一次采访,并且遇到了一个我要编写代码的小问题.

问题基本上是在长度为n的数组中找到重复,使用O(n)中的常量空间.每个元素在1-(n-1)范围内,并保证是重复的.这就是我想出的:

public int findDuplicate(int[] vals) {
    int indexSum=0;
    int valSum=0;   
    for (int i=0; i< vals.length; i++) {
         indexSum += i;
         valSum += vals[i];
    }
    return valSum - indexSum;
}
Run Code Online (Sandbox Code Playgroud)

然后我们讨论了这个算法的运行时间.从0 - > n =(n ^ 2 + n)/ 2的系列之和,它是二次的.但是,算法是不是O(n)时间?操作数量受数组长度的限制吗?

我错过了什么?这个算法是O(n ^ 2)吗?

algorithm code-analysis constraints

1
推荐指数
1
解决办法
212
查看次数

警告C6269:操作顺序可能不正确:取消引用被忽略

我对vs 2010上的c ++代码运行代码分析我在这些行上遇到错误

va_arg(argList, TCHAR_ARG);
va_arg(argList, int*);
Run Code Online (Sandbox Code Playgroud)

警告C6269:操作顺序可能不正确:取消引用被忽略

在这两条线路上收到警告的原因是什么?

我在Switch案件上遇到错误

case 'C':
case 'C'|_atltmpFORCE_ANSI:
case 'C'|_atltmpFORCE_UNICODE:
case 'o';
case 'p':
case 'n':
Run Code Online (Sandbox Code Playgroud)

完整的代码

inline void CXString::FormatV(LPCTSTR lpszFormat, va_list argList)
{
    va_list argListSave = argList;

    // make a guess at the maximum length of the resulting string
    int nMaxLen = 0;
    for (LPCTSTR lpsz = lpszFormat; *lpsz != '\0'; lpsz = CharNext(lpsz))
    {
        // handle '%' character, but watch out for '%%'
        if (*lpsz != '%' || *(lpsz = CharNext(lpsz)) == …
Run Code Online (Sandbox Code Playgroud)

c++ code-analysis visual-c++ visual-c++-2010

1
推荐指数
1
解决办法
556
查看次数

使用Timer定时C#代码

即使在算法分析和Big-Oh方面检查代码的性能也很好!符号我想看看代码在我的电脑中执行需要多少.我已经将List初始化为9999count并从中删除了偶数元素.可悲的是,执行此操作的时间似乎是0:0:0.对结果感到惊讶,我执行时间的方式肯定有问题.有人可以帮我解释代码的时间吗?

        IList<int> source = new List<int>(100);
        for (int i = 0; i < 9999; i++)
        {
            source.Add(i);
        }

        TimeSpan startTime, duration;
        startTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;

        RemoveEven(ref source);
        duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startTime);

        Console.WriteLine(duration.Milliseconds);
        Console.Read();
Run Code Online (Sandbox Code Playgroud)

c# algorithm time code-analysis

1
推荐指数
1
解决办法
1449
查看次数

修复代码分析错误或违反Liskov替换原则/使代码效率低得多

我正在PriorityQueue<T>上课,现在我正在List<T>用作后备商店.以下是我得到的错误:

有正确的后缀/没有不正确的后缀

不要暴露 List<T>

对于-Queue后缀我需要继承Queue<T>,但是为了排序Queue<T>,我需要清空队列,排序,然后重新填充队列.此外,如果我继承Queue<T>,我会违反LSP,因为优先级队列不是FIFO集合.

对于其中一种PriorityQueues,我正在使用a IComparer<T>来比较元素,但IComparer<T>只支持在数组和List<T>.

我确实看到了这个问题,但它与我的问题没有完全相关.

所以这是我的问题:我应该抑制这些代码分析警告吗?我应该继承Queue<T>并重写我的类来解决它,即使效率较低吗?如果没有,我还应该换掉List<T>其他东西吗?

编辑:我不知道这是否会有所不同,但以下是我的每个类的设置:

  • PriorityQueue<T> - 抽象基类(Sort()是抽象的)

  • PriorityQueue<T, TComparer> - 使用比较器进行排序的子类

  • ReflectionPriorityQueue<T> - 使用反射进行排序的子类,对此问题不重要的细节.

c# code-analysis visual-studio-2010

1
推荐指数
1
解决办法
165
查看次数

为什么C#编译器不能告诉该函数总是返回或抛出?

我有以下(简化)方法:

public bool DoWorkWithRetry()
{
    for (int remainingTries = Constants.MaxRetries; remainingTries >= 0; remainingTries--)
    {
        try
        {
            return DoWork();
        }
        catch (Exception ex)
        {
            if (remainingTries == 0)
            {
                throw new WorkException(
                        String.Format("Failed after {0} retries.", Constants.MaxRetries),
                        ex);
            }
            // fall through to retry
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我觉得这个方法要么退还要么抛出.但是,C#编译器向我抱怨not all code paths return a value.

  • 这是C#编译器代码分析的限制吗?
  • 或者是否有一些条件,我没有看到for循环可以完成没有投掷或返回?

c# code-analysis for-loop exception

1
推荐指数
2
解决办法
340
查看次数

控制器上的"CA2000在丢失范围之前处理对象"

我在代码分析中有一个CA2000警告.但我无法找到如何解决它或为什么它是一个问题.这是失败的代码:

 IController controller = new ErrorController();
      controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Run Code Online (Sandbox Code Playgroud)

我试图像这样解决它:

using (IController controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }
Run Code Online (Sandbox Code Playgroud)

但是MVC给了我这个错误:

55  'System.Web.Mvc.IController': type used in a using statement must be implicitly convertible to 'System.IDisposable'
Run Code Online (Sandbox Code Playgroud)

我可以压制错误,但我想知道导致错误的原因并解决问题.

c# code-analysis asp.net-mvc-4

1
推荐指数
1
解决办法
671
查看次数

为什么在继承标准类型时会收到警告CA2229(实现序列化构造函数)

我有这样的类定义:

[Serializable]
public class MyDictionary: Dictionary<string, object>
{
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到此代码分析警告:

CA2229实现序列化构造函数使用以下签名向TcpFieldValueDictionary添加构造函数:'protected TcpFieldValueDictionary(SerializationInfo info,StreamingContext context)'.

但是,通用字典已经具有构造函数,只有public修饰符.

添加这个构造函数很容易(见下文),但为什么要这样做呢?有什么好处?

    protected MyDictionary(SerializationInfo info, StreamingContext context)
        : base(info, context)
    { }
Run Code Online (Sandbox Code Playgroud)

c# code-analysis visual-studio-2012

1
推荐指数
1
解决办法
676
查看次数

可以3n³+ 4n-5 == O(n²)?

我可以将C值更高到3n³+ 4n-5 == O(n²)是真的吗?
例:

3n³+ 4n-5 <=3000n²+4000n²==7000n²C

= 7000

algorithm big-o code-analysis time-complexity

1
推荐指数
2
解决办法
192
查看次数