2016-11-29 104 views
0

我已经编写了(并且大部分是调试的)一个处理由宏调用组成的用户输入文件的程序。我想现在在用户输入文件中添加全面的错误检查。是否有一种通用的最佳实践方法在这样的文件上执行句法&语义错误检查?我能想到的三种基本方法是1)编写一个单独的预处理程序来验证文件,2)指定BNF并使用现成的编译器编译器作为预处理器,或者3)将错误检查集成到现有的方案。第三种方法似乎可能会更好,因为它可以启用更深层次的语义检查?我想知道这些和其他方法的利弊&缺点。错误检查用户输入文件

+0

您的输入是否可以作为连续的Lisp表单读取,还是需要解析器? – coredump

+0

我不知道是否在顶层(非正常编译)进行独立解析会很有用,因为输入文件只是lisp表单(单个宏调用,由于依赖关系需要按顺序处理)的列表。但是,某些宏调用中提供的用户信息由简短的类似于语言的逻辑“程序”组成,这些程序被基准程序用于尝试解决用户指定的问题。所以有一些解析涉及。但是用于处理各种逻辑程序单元的代码已经是工作基准的一部分,以lisp编码。 – davypough

+0

我不知道这是否是堆栈溢出格式的“可回答”,但肯定会需要一个小例子 - 但是 - 我已经做了一些类似的事情,只是通过验证来散布宏观开拓者。调用者所期望的越“复杂”,输入验证越丰富且冗长;通常很多'Assert'和'Check-Type'都有详细的详细错误信息。 – BRFennPocock

回答

0

谢谢coredump & BRFennPocock为您的经验的利益。我会接受你的建议,并在现有程序中嵌入错误检查,尽管肯定是一个错误^ 2倾向于尝试捕捉所有事情。没有提前白名单,但我可以根据用户的输入建立一个白名单,然后检查所有用途之间的一致性(例如,覆盖拼写错误)。大多数断言&检查类型看起来像它们将在加载时发生。再次感谢。