用于处理错误的伪代码程序
Pseudo-code program for handling errors
我想用伪代码编写一个程序来识别 C/C++ 源文件中“#”或“%”的错误使用。
这听起来很简单,但我不确定如何 write/describe in "pseudo code" 该符号出现的位置,例如 before/after 是否是变量名。
我应该使用类似的东西吗:
If "#" after var_a
then "Error!"
elseif before ";"
.... and so on
或者我应该使用类似#_ASCII_code is_after "symbol"...
我真的不知道如何用伪代码来描述这些特殊情况。
我不得不提一下,我在互联网上阅读了有关伪代码的信息。(我使用了搜索按钮)
提前致谢。
您的方法无效,因为它是 too simple. The solution is a multi-step process called "parsing" until you end up with an AST:
- 首先需要将源文件中的字符流转换为token(
b = a ++
-> ID ASSIGN ID INCREMENT
)。
- 那么你需要一个LL parser to convert those into higher level rules. The rules for a whole source file are usually called AST - Abstract Syntax Tree.
那棵树现在允许您编写伪代码:
For all AST nodes with the text representation "#"
if the previous sibling is a variable
...
else if the next sibling is ";"
...
伪代码是规范的一种形式。如果用伪代码写这个规范太难,那么先用自然语言写,例如 "All variables shall be perfixed by '#'." 从中自动得出一个没有前缀 '#' 的变量是错误的。
编写规范可以确保问题得到很好的描述。在此之后,您可以从伪代码开始,这是一种设计形式,最后您可以编写真正的程序,可以使用任何语言或机制。例如,您可以决定解决方案适合 yacc 脚本,或者它足够简单,您可以直接用 C 或 C++ 对其进行编码。
由于伪代码定义不当,可能会导致此伪实现中的需求描述不当。从一个糟糕的伪实现到一个真正的实现然后导致一个糟糕的实现(另见:错误)。
最好不要使用伪代码。
我想用伪代码编写一个程序来识别 C/C++ 源文件中“#”或“%”的错误使用。 这听起来很简单,但我不确定如何 write/describe in "pseudo code" 该符号出现的位置,例如 before/after 是否是变量名。
我应该使用类似的东西吗:
If "#" after var_a
then "Error!"
elseif before ";"
.... and so on
或者我应该使用类似#_ASCII_code is_after "symbol"...
我真的不知道如何用伪代码来描述这些特殊情况。
我不得不提一下,我在互联网上阅读了有关伪代码的信息。(我使用了搜索按钮)
提前致谢。
您的方法无效,因为它是 too simple. The solution is a multi-step process called "parsing" until you end up with an AST:
- 首先需要将源文件中的字符流转换为token(
b = a ++
->ID ASSIGN ID INCREMENT
)。 - 那么你需要一个LL parser to convert those into higher level rules. The rules for a whole source file are usually called AST - Abstract Syntax Tree.
那棵树现在允许您编写伪代码:
For all AST nodes with the text representation "#"
if the previous sibling is a variable
...
else if the next sibling is ";"
...
伪代码是规范的一种形式。如果用伪代码写这个规范太难,那么先用自然语言写,例如 "All variables shall be perfixed by '#'." 从中自动得出一个没有前缀 '#' 的变量是错误的。
编写规范可以确保问题得到很好的描述。在此之后,您可以从伪代码开始,这是一种设计形式,最后您可以编写真正的程序,可以使用任何语言或机制。例如,您可以决定解决方案适合 yacc 脚本,或者它足够简单,您可以直接用 C 或 C++ 对其进行编码。
由于伪代码定义不当,可能会导致此伪实现中的需求描述不当。从一个糟糕的伪实现到一个真正的实现然后导致一个糟糕的实现(另见:错误)。
最好不要使用伪代码。