@@ -331,7 +331,7 @@ digraph ast {
331
331
332
332
Note that the parameter `n` in `factorial` and the local variable `n` in
333
333
`main` are now disambiguated as `n.1` and `n.2`; furthermore, we leave
334
- the names of global objects as-is. In the CProver framework, a more
334
+ the names of global objects as-is. In the CPROVER framework, a more
335
335
elaborate system is used: local variables are prefixed with the function names,
336
336
and further disambiguation is performed by adding indices. For brevity,
337
337
we use indices only.
@@ -463,7 +463,7 @@ This function consists of four basic blocks:
463
463
4 . ` return fac.1 `
464
464
(this block has a label, ` for_loop_end ` ).
465
465
466
- One way to undestand which functions form basic blocks is to consider the
466
+ One way to understand which functions form basic blocks is to consider the
467
467
successors of each instruction. If we have two instructions A and B, we say
468
468
that B is a * successor* of A if, after executing A, we can execute B without any
469
469
intervening instructions. For instance, in the example above, the loop
@@ -472,11 +472,11 @@ initialization statement `unsigned long int i.1 = 1` is a successor of
472
472
of ` unsigned long fac.1 = 1 ` : we always have to execute some other intermediate
473
473
statements to reach the return statement.
474
474
475
- Now, consider the ` if ` statment ,
475
+ Now, consider the ` if ` statement ,
476
476
` if (i.1 <= n.1) goto for_loop_entry else goto for_loop_end ` .
477
477
This statement has * two* successors: ` fac.1 *= i.1 ` and ` return fac.1 ` .
478
478
479
- Similarily , we say that A is a * predecessor* of B if B is a sucessor of A.
479
+ Similarly , we say that A is a * predecessor* of B if B is a successor of A.
480
480
We find that the ` if ` statement has two predecessors,
481
481
` unsigned int i.1 = 1 ` and ` goto for_loop_start ` .
482
482
0 commit comments