Showing preview only (2,236K chars total). Download the full file or copy to clipboard to get everything.
Repository: fool2fish/dragon-book-exercise-answers
Branch: master
Commit: 34db00b33f72
Files: 136
Total size: 2.1 MB
Directory structure:
gitextract_pa2oc77t/
├── .gitignore
├── README.md
├── ch01/
│ ├── 1.1/
│ │ └── 1.1.md
│ ├── 1.3/
│ │ └── 1.3.md
│ └── 1.6/
│ └── 1.6.md
├── ch02/
│ ├── 2.2/
│ │ └── 2.2.md
│ ├── 2.3/
│ │ └── 2.3.md
│ ├── 2.4/
│ │ ├── 2.4.1.1.c
│ │ ├── 2.4.1.2.c
│ │ ├── 2.4.1.3.c
│ │ └── 2.4.md
│ ├── 2.6/
│ │ └── 2.6.md
│ ├── 2.8/
│ │ └── 2.8.md
│ └── key-point/
│ └── key-point.md
├── ch03/
│ ├── 3.1/
│ │ └── 3.1.md
│ ├── 3.3/
│ │ ├── 3.3.md
│ │ └── assets/
│ │ ├── 3.3.5-4-1.graphml
│ │ ├── 3.3.5-4-2.graphml
│ │ ├── 3.3.5-4-3.graphml
│ │ ├── 3.3.5-4-4.graphml
│ │ ├── 3.3.5-4.graphml
│ │ ├── 3.3.5-5-1.graphml
│ │ ├── 3.3.5-5-2.graphml
│ │ ├── 3.3.5-5-3.graphml
│ │ ├── 3.3.5-5-4.graphml
│ │ └── 3.3.5-5.graphml
│ ├── 3.4/
│ │ ├── 3.4.md
│ │ ├── assets/
│ │ │ ├── 3.4.1-1-dfa.graphml
│ │ │ ├── 3.4.1-1-nfa.graphml
│ │ │ ├── 3.4.1-1.graphml
│ │ │ ├── 3.4.1-2.graphml
│ │ │ ├── 3.4.1-3-nfa.graphml
│ │ │ ├── 3.4.1-3.graphml
│ │ │ └── 3.4.1-4.graphml
│ │ └── src/
│ │ ├── failure-function.js
│ │ └── kmp.js
│ ├── 3.5/
│ │ ├── 3.5.md
│ │ └── src/
│ │ ├── lex.l
│ │ ├── lex2.l
│ │ └── lex3.l
│ ├── 3.6/
│ │ ├── 3.6.md
│ │ └── assets/
│ │ └── 3.6.1.graphml
│ ├── 3.7/
│ │ ├── 3.7.md
│ │ └── assets/
│ │ ├── 3.7.1-1.graphml
│ │ ├── 3.7.1-2.graphml
│ │ ├── 3.7.1-3.graphml
│ │ ├── 3.7.3-4-dfa.graphml
│ │ └── 3.7.3-4-nfa.graphml
│ ├── 3.8/
│ │ ├── 3.8.md
│ │ └── assets/
│ │ ├── 3.8.1-dfa.graphml
│ │ ├── 3.8.1-nfa.graphml
│ │ ├── 3.8.2-nfa.graphml
│ │ ├── 3.8.3-1.graphml
│ │ └── 3.8.3-2.graphml
│ ├── 3.9/
│ │ ├── 3.9.md
│ │ └── assets/
│ │ ├── 3.9.2-1-1.graphml
│ │ ├── 3.9.2-1-2.graphml
│ │ └── 3.9.2-1-dfa.graphml
│ └── key-point/
│ └── key-point.md
├── ch04/
│ ├── 4.2/
│ │ ├── 4.2.md
│ │ └── assets/
│ │ └── 4.2.1.graphml
│ ├── 4.3/
│ │ └── 4.3.md
│ ├── 4.4/
│ │ ├── 4.4.md
│ │ └── cs.columbia.edu-aho-cs3261-properties-of-cfl-121008.html
│ ├── 4.5/
│ │ └── 4.5.md
│ ├── 4.6/
│ │ ├── 4.6.md
│ │ └── assets/
│ │ ├── 4.6.1-1.graphml
│ │ ├── 4.6.1-2.graphml
│ │ └── 4.6.1-3.graphml
│ ├── 4.7/
│ │ └── 4.7.md
│ └── key-point/
│ └── key-point.md
├── ch05/
│ ├── 5.1/
│ │ ├── 5.1.md
│ │ └── assets/
│ │ ├── 5.1.1-1.graphml
│ │ ├── 5.1.1-2.graphml
│ │ ├── 5.1.3-1.graphml
│ │ └── 5.1.3-2.graphml
│ ├── 5.2/
│ │ ├── 5.2.1.js
│ │ ├── 5.2.md
│ │ └── assets/
│ │ └── 5.2.2-1.graphml
│ ├── 5.3/
│ │ └── 5.3.md
│ ├── 5.4/
│ │ └── 5.4.md
│ └── 5.5/
│ └── 5.5.md
├── ch06/
│ ├── 6.1/
│ │ ├── 6.1.md
│ │ └── assets/
│ │ ├── 6.1.1.graphml
│ │ ├── 6.1.2-1.graphml
│ │ ├── 6.1.2-2.graphml
│ │ └── 6.1.2-3.graphml
│ ├── 6.2/
│ │ ├── 6.2.md
│ │ └── assets/
│ │ └── 6.2.1.graphml
│ ├── 6.3/
│ │ └── 6.3.md
│ ├── 6.4/
│ │ ├── 6.4.md
│ │ └── assets/
│ │ ├── 6.4.3-1.graphml
│ │ └── 6.4.3-2.graphml
│ ├── 6.5/
│ │ └── 6.5.md
│ ├── 6.6/
│ │ └── 6.6.md
│ └── 6.7/
│ ├── 6.7.md
│ └── assets/
│ └── 6.7.1-1.graphml
├── ch07/
│ ├── 7.2/
│ │ ├── 7.2.6.c
│ │ ├── 7.2.md
│ │ └── assets/
│ │ ├── 7.2.1-1.graphml
│ │ ├── 7.2.3-1.graphml
│ │ ├── 7.2.3-2.graphml
│ │ ├── 7.2.3-3.graphml
│ │ └── 7.2.4.graphml
│ ├── 7.3/
│ │ ├── 7.3.md
│ │ └── assets/
│ │ ├── 7.3.1-activation-stack.graphml
│ │ ├── 7.3.1-activation-tree.graphml
│ │ └── 7.3.2.graphml
│ ├── 7.4/
│ │ └── 7.4.md
│ ├── 7.5/
│ │ ├── 7.5.md
│ │ └── assets/
│ │ ├── 7.5.1-1.graphml
│ │ ├── 7.5.1-2.graphml
│ │ ├── 7.5.1-3.graphml
│ │ └── 7.5.2.graphml
│ ├── 7.6/
│ │ └── 7.6.md
│ └── 7.7/
│ ├── 7.7.md
│ └── assets/
│ ├── 7.7.1-1.graphml
│ └── 7.7.1-2.graphml
├── ch08/
│ ├── 8.2/
│ │ └── 8.2.md
│ ├── 8.3/
│ │ └── 8.3.md
│ ├── 8.4/
│ │ ├── 8.4.md
│ │ └── assets/
│ │ ├── 8.4.1-2.graphml
│ │ └── 8.4.2-2.graphml
│ └── 8.5/
│ ├── 8.5.md
│ └── assets/
│ ├── 8.5.1.graphml
│ ├── 8.5.3.graphml
│ └── 8.5.4.graphml
├── ch12/
│ ├── 12.3/
│ │ └── 12.3.md
│ └── 12.7/
│ └── 12.7.md
└── src/
└── lexer/
├── Lexer.java
├── Num.java
├── Rel.java
├── SyntaxException.java
├── Tag.java
├── Token.java
└── Word.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.DS_Store
.project
.settings
.classpath
build/
*.out
================================================
FILE: README.md
================================================
# Compilers Principles, Techniques, & Tools (purple dragon book) second edition exercise answers
# 编译原理(紫龙书)中文第2版习题答案
[](https://gitter.im/fool2fish/dragon-book-exercise-answers?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
### Something I hope you know before go into the answers
- First, please **watch** or **star** this repo, I'll be more happy if you **follow** me.
- Bug report, questions and discussion are welcome, you can post an [issue](https://github.com/fool2fish/dragon-book-practice-answer/issues/new) or [pull a request](https://help.github.com/articles/using-pull-requests).
- All graphs are painted by [yed](http://www.yworks.com/en/products_yed_about.html), it is simple, cross-platform and free.
- There are some key-point.md file, key points and difficult points are summarized in them.
- As we know only teacher can buy the answer book, so I don't know the standard answer, but I tried my best to keep the correctness, if you found any bug, please [tell me](https://github.com/fool2fish/dragon-book-practice-answer/issues/new), thanks.
### License
It is still under consideration. Anyone know which is suitable?
================================================
FILE: ch01/1.1/1.1.md
================================================
# Exercises for Section 1.1
### 1.1.1
What is the difference between a compiler and an interpreter?
#### Answer
A compiler is a program that can read a program in one language - the source language - and translate it into an equivalent program in another language – the target language and report any errors in the source program that it detects during the translation process.
Interpreter directly executes the operations specified in the source program on inputs supplied by the user.
### 1.1.2
What are the advantages of:
(a) a compiler over an interpreter
(b) an interpreter over a compiler?
#### Answer
a. The machine-language target program produced by a compiler is usually much faster than an interpreter at mapping inputs to outputs.
b. An interpreter can usually give better error diagnostics than a compiler, because it executes the source program statement by statement.
### 1.1.3
What advantages are there to a language-processing system in which the compiler
produces assembly language rather than machine language?
#### Answer
The compiler may produce an assembly-language program as its output, because
assembly language is easier to produce as output and is easier to debug.
### 1.1.4
A compiler that translates a high-level language into another high-level
language is called a *source-to-source* translator. What advantages are there to
using C as a target language for a compiler?
#### Answer
For the C language there are many compilers available that compile to almost
every hardware.
### 1.1.5
Describe some of the tasks that an assembler needs to perform.
#### Answer
It translates from the assembly language to machine code. This machine code is
relocatable.
================================================
FILE: ch01/1.3/1.3.md
================================================
# Exercises for Section 1.3
### 1.3.1
Indicate which of the following terms:
a. imperative
b. declarative
c. von Neumann
d. object-oriented
e. functional
f. third-generation
g. fourth-generation
h. scripting
apply to which of the following languages:
1. C
2. C++
3. Cobol
4. Fortran
5. Java
6. Lisp
7. ML
8. Perl
9. Python
10. VB.
#### Answer
imperative: C, C++
object-oriented: C++, Java
functional: ML
scripting: Perl, Python
================================================
FILE: ch01/1.6/1.6.md
================================================
# Exercises for Section 1.6
### 1.6.1
For the block-structured C code below, indicate the values assigned to w, x, y, and z.
```
int w, x, y, z;
int i = 4; int j = 5;
{
int j = 7;
i = 6;
w = i + j;
}
x = i + j;
{
int i = 8;
y = i + j;
}
z = i + j;
```
#### Answer
w = 13, x = 11, y = 13, z = 11.
### 1.6.2
Repeat Exercise 1.6.1 for the code below.
```
int w, x, y, z;
int i = 3; int j = 4;
{
int i = 5;
w = i + j;
}
x = i + j;
{
int j = 6;
i = 7;
y = i + j;
}
z = i + j;
```
#### Answer
w = 9, x = 7, y = 13, z = 11.
### 1.6.3
For the block-structured code of Fig. 1.14, assuming the usual static scoping of
declarations, give the scope for each of the twelve declarations.
#### Answer
```
Block B1:
declarations: -> scope
w B1-B3-B4
x B1-B2-B4
y B1-B5
z B1-B2-B5
Block B2:
declarations: -> scope
x B2-B3
z B2
Block B3:
declarations: -> scope
w B3
x B3
Block B4:
declarations: -> scope
w B4
x B4
Block B5:
declarations: -> scope
y B5
z B5
```
### 1.6.4
What is printed by the following C code?
```
#define a (x + 1)
int x = 2;
void b() { x = a; printf("%d\n", x); }
void c() { int x = 1; printf("%d\n", a); }
void main () { b(); c(); }
```
#### Answer
3
2
================================================
FILE: ch02/2.2/2.2.md
================================================
# Exercises for Section 2.2
### 2.2.1
Consider the context-free grammar:
S -> S S + | S S * | a
1. Show how the string `aa+a*` can be generated by this grammar.
2. Construct a parse tree for this string.
3. What language does this grammar generate? Justify your answer.
#### Answer
1. `S` -> `S` S * -> `S` S + S * -> a `S` + S * -> a a + `S` * -> a a + a *
2. 
3. L = {Postfix expression consisting of digits, plus and multiple signs}
### 2.2.2
What language is generated by the following grammars? In each case justify your answer.
1. S -> 0 S 1 | 0 1
2. S -> + S S | - S S | a
3. S -> S ( S ) S | ε
4. S -> a S b S | b S a S | ε
5. S -> a | S + S | S S | S * | ( S )
#### Answer
1. L = {0<sup>n</sup>1<sup>n</sup> | n>=1}
2. L = {Prefix expression consisting of plus and minus signs}
3. L = {Matched brackets of arbitrary arrangement and nesting, includes ε}
4. L = {String has the same amount of a and b, includes ε}
5. L = {Regular expressions used to describe regular languages} [refer to wiki](http://en.wikipedia.org/wiki/Regular_expression)
### 2.2.3
Which of the grammars in Exercise 2.2.2 are ambiguous?
#### Answer
1. No
2. No
3. Yes

4. Yes

5. Yes

### 2.2.4
Construct unambiguous context-free grammars for each of
the following languages. In each case show that your grammar is correct.
1. Arithmetic expressions in postfix notation.
2. Left-associative lists of identifiers separated by commas.
3. Right-associative lists of identifiers separated by commas.
4. Arithmetic expressions of integers and identifiers with the four binary operators +, -, *, /.
5. Add unary plus and minus to the arithmetic operators of 4.
#### Answer
```
1. E -> E E op | num
2. list -> list , id | id
3. list -> id , list | id
4. expr -> expr + term | expr - term | term
term -> term * factor | term / factor | factor
factor -> id | num | (expr)
5. expr -> expr + term | expr - term | term
term -> term * unary | term / unary | unary
unary -> + factor | - factor | factor
factor - > id | num | (expr)
```
### 2.2.5
1. Show that all binary strings generated by the following grammar have values divisible by 3. Hint. Use induction on the number of nodes in a parse tree.
num -> 11 | 1001 | num 0 | num num
2. Does the grammar generate all binary strings with values divisible by 3?
#### Answer
1. Proof
Any string derived from the grammar can be considered to be a sequence consisting of 11 and 1001, where each sequence element is possibly suffixed with a 0.
Let `n` be the set of positions where `11` is placed. `11` is said to be at position `i` if the first `1` in `11` is at position `i`, where `i` starts at 0 and
grows from least significant to most significant bit.
Let `m` be the equivalent set for `1001`.
The sum of any string produced by the grammar is:
sum
= Σ<sub>n</sub> (2<sup>1</sup> + 2<sup>0</sup>) * 2 <sup>n</sup> + Σ<sub>m</sub> (2<sup>3</sup> + 2<sup>0</sup>) * 2<sup>m</sup>
= Σ<sub>n</sub> 3 * 2 <sup>n</sup> + Σ<sub>m</sub> 9 * 2<sup>m</sup>
This is clearly divisible by 3.
2. No. Consider the string "10101", which is divisible by 3, but cannot be
derived from the grammar.
Readers seeking a more formal proof can read about it below:
**Proof**:
Every number divisible by 3 can be written in the form `3k`. We will consider `k > 0` (though it would be valid to consider `k` to be an arbitrary integer).
Note that every part of num(11, 1001 and 0) is divisible by 3, if the grammar could generate all the numbers divisible by 3, we can get a production for binary k from num's production:
```
3k = num -> 11 | 1001 | num 0 | num num
k = num/3 -> 01 | 0011 | k 0 | k k
k -> 01 | 0011 | k 0 | k k
```
It is obvious that any value of `k` that has more than 2 consecutive bits set to 1 can never be produced. This can be confirmed by the example given in the beginning:
10101 is 3*7, hence, k = 7 = 111 in binary. Because 111 has more than 2
consecutive 1's in binary, the grammar will never produce 21.
### 2.2.6
Construct a context-free grammar for roman numerals.
**Note:** we just consider a subset of roman numerals which is less than 4k.
#### Answer
[wikipedia: Roman_numerals](http://en.wikipedia.org/wiki/Roman_numerals)
- via wikipedia, we can categorize the single roman numerals into 4 groups:
```
I, II, III | I V | V, V I, V II, V III | I X
```
then get the production:
```
digit -> smallDigit | I V | V smallDigit | I X
smallDigit -> I | II | III | ε
```
- and we can find a simple way to map roman to arabic numerals. For example:
- XII => X, II => 10 + 2 => 12
- CXCIX => C, XC, IX => 100 + 90 + 9 => 199
- MDCCCLXXX => M, DCCC, LXXX => 1000 + 800 + 80 => 1880
- via the upper two rules, we can derive the production:
romanNum -> thousand hundred ten digit
thousand -> M | MM | MMM | ε
hundred -> smallHundred | C D | D smallHundred | C M
smallHundred -> C | CC | CCC | ε
ten -> smallTen | X L | L smallTen | X C
smallTen -> X | XX | XXX | ε
digit -> smallDigit | I V | V smallDigit | I X
smallDigit -> I | II | III | ε
================================================
FILE: ch02/2.3/2.3.md
================================================
# 2.3 Exercises for Section 2.3
### 2.3.1
Construct a syntax-directed translation scheme that translates arithmetic
expressions from infix notation into prefix notation in which an operator
appears before its operands; e.g. , -xy is the prefix notation for x - y. Give
annotated parse trees for the inputs 9-5+2 and 9-5*2.
#### Answer
productions:
```
expr -> expr + term
| expr - term
| term
term -> term * factor
| term / factor
| factor
factor -> digit | (expr)
```
translation schemes:
```
expr -> {print("+")} expr + term
| {print("-")} expr - term
| term
term -> {print("*")} term * factor
| {print("/")} term / factor
| factor
factor -> digit {print(digit)}
| (expr)
```
### 2.3.2
Construct a syntax-directed translation scheme that translates arithmetic
expressions from postfix notation into infix notation. Give annotated parse
trees for the inputs 95-2* and 952*-.
#### Answer
productions:
```
expr -> expr expr +
| expr expr -
| expr expr *
| expr expr /
| digit
```
translation schemes:
```
expr -> expr {print("+")} expr +
| expr {print("-")} expr -
| {print("(")} expr {print(")*(")} expr {print(")")} *
| {print("(")} expr {print(")/(")} expr {print(")")} /
| digit {print(digit)}
```
#### Another reference answer
```
E -> {print("(")} E {print(op)} E {print(")"}} op | digit {print(digit)}
```
### 2.3.3
Construct a syntax-directed translation scheme that translates integers into
roman numerals.
#### Answer
assistant function:
```
repeat(sign, times) // repeat('a',2) = 'aa'
```
translation schemes:
```
num -> thousand hundred ten digit
{ num.roman = thousand.roman || hundred.roman || ten.roman || digit.roman;
print(num.roman)}
thousand -> low {thousand.roman = repeat('M', low.v)}
hundred -> low {hundred.roman = repeat('C', low.v)}
| 4 {hundred.roman = 'CD'}
| high {hundred.roman = 'D' || repeat('X', high.v - 5)}
| 9 {hundred.roman = 'CM'}
ten -> low {ten.roman = repeat('X', low.v)}
| 4 {ten.roman = 'XL'}
| high {ten.roman = 'L' || repeat('X', high.v - 5)}
| 9 {ten.roman = 'XC'}
digit -> low {digit.roman = repeat('I', low.v)}
| 4 {digit.roman = 'IV'}
| high {digit.roman = 'V' || repeat('I', high.v - 5)}
| 9 {digit.roman = 'IX'}
low -> 0 {low.v = 0}
| 1 {low.v = 1}
| 2 {low.v = 2}
| 3 {low.v = 3}
high -> 5 {high.v = 5}
| 6 {high.v = 6}
| 7 {high.v = 7}
| 8 {high.v = 8}
```
### 2.3.4
Construct a syntax-directed translation scheme that trans lates roman numerals into integers.
#### Answer
productions:
```
romanNum -> thousand hundred ten digit
thousand -> M | MM | MMM | ε
hundred -> smallHundred | C D | D smallHundred | C M
smallHundred -> C | CC | CCC | ε
ten -> smallTen | X L | L smallTen | X C
smallTen -> X | XX | XXX | ε
digit -> smallDigit | I V | V smallDigit | I X
smallDigit -> I | II | III | ε
```
translation schemes:
```
romanNum -> thousand hundred ten digit {romanNum.v = thousand.v || hundred.v || ten.v || digit.v; print(romanNun.v)}
thousand -> M {thousand.v = 1}
| MM {thousand.v = 2}
| MMM {thousand.v = 3}
| ε {thousand.v = 0}
hundred -> smallHundred {hundred.v = smallHundred.v}
| C D {hundred.v = smallHundred.v}
| D smallHundred {hundred.v = 5 + smallHundred.v}
| C M {hundred.v = 9}
smallHundred -> C {smallHundred.v = 1}
| CC {smallHundred.v = 2}
| CCC {smallHundred.v = 3}
| ε {hundred.v = 0}
ten -> smallTen {ten.v = smallTen.v}
| X L {ten.v = 4}
| L smallTen {ten.v = 5 + smallTen.v}
| X C {ten.v = 9}
smallTen -> X {smallTen.v = 1}
| XX {smallTen.v = 2}
| XXX {smallTen.v = 3}
| ε {smallTen.v = 0}
digit -> smallDigit {digit.v = smallDigit.v}
| I V {digit.v = 4}
| V smallDigit {digit.v = 5 + smallDigit.v}
| I X {digit.v = 9}
smallDigit -> I {smallDigit.v = 1}
| II {smallDigit.v = 2}
| III {smallDigit.v = 3}
| ε {smallDigit.v = 0}
```
### 2.3.5
Construct a syntax-directed translation scheme that translates postfix
arithmetic expressions into equivalent prefix arithmetic expressions.
#### Answer
production:
```
expr -> expr expr op | digit
```
translation scheme:
```
expr -> {print(op)} expr expr op | digit {print(digit)}
```
================================================
FILE: ch02/2.4/2.4.1.1.c
================================================
/*
Compile with:
gcc -Wall -o parser 2.4.1.1.c
Run: ./parser
The code will quitely parse well-formed expressions. For bad expressions that don't
follow the grammar, it will complain with "Syntax error."
Some example input:
> ++++aaaaa
> +++--+-+-+-+-+++-a-aaaaaaaaaaaaaaaaaa
>
Note that you canot use spaces. The grammar doesn't allow for that.
We could change gettoken() to ignore spaces, but we'd be introducing
a problem. You see, when reading the input, the last lookahead symbol
left is a newline. If we ignored whitespace, we would block on the call
to gettoken() in the last production, because gettoken() would ignore
whitespaces! This is why a lot of languages require statements to be
properly ended, for example, with a semi-colon.
*/
#include <stdio.h>
/* The lookahead symbol */
int token;
int gettoken(void) {
return token = getchar();
}
void s(void) {
if (token == 'a')
gettoken();
else if (token == '+' || token == '-') {
gettoken();
s();
s();
}
else {
fprintf(stderr, "Syntax error.\n");
}
}
int main(void) {
printf("Please enter expressions according to the following grammar:\n");
printf("S -> '+' S S | '-' S S | 'a'\n");
while (1) {
printf("> ");
fflush(stdout);
gettoken();
s();
}
return 0;
}
================================================
FILE: ch02/2.4/2.4.1.2.c
================================================
/*
Compile with:
gcc -Wall -o parser 2.4.1.2.c
Run: ./parser
The grammar given cannot be used as is, since it is left recursive.
Recursive descent parsers cannot be implemented with a left recursive grammar,
because it would loop forever!
Instead, we apply the rule mentioned earlier in the book to convert this grammar
to an equivalent grammar without left recursion. The general form of the rule is:
A -> Aa | B
is equivalent to:
A -> BR
R -> aR | epsilon
In our case, A is S, and B is epsilon; we get:
S -> R
R -> '(' S ')' S
| epsilon
This is the grammar that the code below implements.
*/
#include <stdio.h>
/* The lookahead symbol */
int token;
int gettoken(void) {
return token = getchar();
}
void r(void);
void s(void) {
r();
}
void r(void) {
if (token != '(')
return; /* R -> epsilon */
gettoken();
s();
if (token != ')') {
fprintf(stderr, "Syntax error.\n");
return;
}
gettoken();
s();
}
int main(void) {
printf("Please enter expressions according to the following grammar:\n");
printf("S -> S '(' S ')' S | epsilon\n");
while (1) {
printf("> ");
fflush(stdout);
gettoken();
s();
}
return 0;
}
================================================
FILE: ch02/2.4/2.4.1.3.c
================================================
/*
Compile with:
gcc -Wall -o parser 2.4.1.3.c
Run: ./parser
Again, the grammar given cannot be used as provided, because it is not clear which production
to use when a '0' is read. In particular, FIRST('0' S '1') is not disjoint with FIRST('0' '1'), which
makes it ambiguous for a predictive parser to move forward.
One solution would be to recursively try the first production, and if unsuccessfull, try the second alternative.
This would still make it a recursive descent parser, but there is a more intelligent approach.
The grammar can be "factored out" by bringing together those rules where FIRST is '0'. The following grammar
is equivalent to the original one, with the advantage that it can be implemented using a predictive parser:
S -> '0' R
R -> S '1' | '1'
Basically, the rules starting with '0' were merged into a single rule, and the rest of the job delegated to R.
Since S always starts with a '0' now, it is trivial to implement a predictive parser for this tweaked version.
*/
#include <stdio.h>
/* The lookahead symbol */
int token;
int gettoken(void) {
return token = getchar();
}
void r(void);
void s(void) {
if (token != '0')
fprintf(stderr, "Syntax error.\n");
else {
gettoken();
r();
}
}
void r(void) {
switch (token) {
case '0':
s();
if (token != '1')
fprintf(stderr, "Syntax error.\n");
gettoken();
break;
case '1':
gettoken();
break;
default:
fprintf(stderr, "Syntax error.\n");
break;
}
}
int main(void) {
printf("Please enter expressions according to the following grammar:\n");
printf("S -> '0' S '1' | '0' '1'\n");
while (1) {
printf("> ");
fflush(stdout);
gettoken();
s();
}
return 0;
}
================================================
FILE: ch02/2.4/2.4.md
================================================
## Exercises for Section 2.4
### 2.4.1
Construct recursive-descent parsers, starting with the following grammars:
1. S -> + S S | - S S | a
2. S -> S ( S ) S | ε
3. S -> 0 S 1 | 0 1
### Answer
See [2.4.1.1.c](./2.4.1.1.c), [2.4.1.2.c](./2.4.1.2.c), and [2.4.1.3.c](./2.4.1.3.c) for real implementations in C.
1) S -> + S S | - S S | a
```
void S(){
switch(lookahead){
case "+":
match("+"); S(); S();
break;
case "-":
match("-"); S(); S();
break;
case "a":
match("a");
break;
default:
throw new SyntaxException();
}
}
void match(Terminal t){
if(lookahead = t){
lookahead = nextTerminal();
}else{
throw new SyntaxException()
}
}
```
2) S -> S ( S ) S | ε
```
void S(){
if(lookahead == "("){
match("("); S(); match(")"); S();
}
}
```
3) S -> 0 S 1 | 0 1
```
void S(){
switch(lookahead){
case "0":
match("0"); S(); match("1");
break;
case "1":
// match(epsilon);
break;
default:
throw new SyntaxException();
}
}
```
================================================
FILE: ch02/2.6/2.6.md
================================================
# Exercises for Section 2.6
### 2.6.1
Extend the lexical analyzer in Section 2.6.5 to remove comments, defined as
follows:
1. A comment begins with // and includes all characters until the end of that line.
2. A comment begins with /* and includes all characters through the next occurrence of the character sequence */.
### 2.6.2
Extend the lexical analyzer in Section 2.6.5 to recognize the relational operators <, <=, ==, ! =, >=, >.
### 2.6.3
Extend the lexical analyzer in Section 2.6.5 to recognize floating point numbers
such as 2., 3.14, and . 5.
### Answer
Source code: commit 8dd1a9a
Code snippet(src/lexer/Lexer.java):
```
public Token scan() throws IOException, SyntaxException{
for(;;peek = (char)stream.read()){
if(peek == ' ' || peek == '\t'){
continue;
}else if(peek == '\n'){
line = line + 1;
}else{
break;
}
}
// handle comment
if(peek == '/'){
peek = (char) stream.read();
if(peek == '/'){
// single line comment
for(;;peek = (char)stream.read()){
if(peek == '\n'){
break;
}
}
}else if(peek == '*'){
// block comment
char prevPeek = ' ';
for(;;prevPeek = peek, peek = (char)stream.read()){
if(prevPeek == '*' && peek == '/'){
break;
}
}
}else{
throw new SyntaxException();
}
}
// handle relation sign
if("<=!>".indexOf(peek) > -1){
StringBuffer b = new StringBuffer();
b.append(peek);
peek = (char)stream.read();
if(peek == '='){
b.append(peek);
}
return new Rel(b.toString());
}
// handle number, no type sensitive
if(Character.isDigit(peek) || peek == '.'){
Boolean isDotExist = false;
StringBuffer b = new StringBuffer();
do{
if(peek == '.'){
isDotExist = true;
}
b.append(peek);
peek = (char)stream.read();
}while(isDotExist == true ? Character.isDigit(peek) : Character.isDigit(peek) || peek == '.');
return new Num(new Float(b.toString()));
}
// handle word
if(Character.isLetter(peek)){
StringBuffer b = new StringBuffer();
do{
b.append(peek);
peek = (char)stream.read();
}while(Character.isLetterOrDigit(peek));
String s = b.toString();
Word w = words.get(s);
if(w == null){
w = new Word(Tag.ID, s);
words.put(s, w);
}
return w;
}
Token t = new Token(peek);
peek = ' ';
return t;
}
```
================================================
FILE: ch02/2.8/2.8.md
================================================
# Exercises for Section 2.8
### 2.8.1
For-statements in C and Java have the form:
for ( exprl ; expr2 ; expr3 ) stmt
The first expression is executed before the loop; it is typically used for
initializing the loop index. The second expression is a test made before each
iteration of the loop; the loop is exited if the expression becomes 0. The loop
itself can be thought of as the statement {stmt expr3 ; }. The third expression
is executed at the end of each iteration; it is typically used to increment the
loop index. The meaning of the for-statement is similar to
expr1 ; while ( expr2 ) {stmt expr3 ; }
Define a class For for for-statements, similar to class If in Fig. 2.43.
#### Answer
```
class For extends Stmt {
Expr E1;
Expr E2;
Expr E3;
Stmt S;
public For(Expr expr1, Expr expr2, Expr expr3, Stmt stmt){
E1 = expr1;
E2 = expr2;
E3 = expr3;
S = stmt;
}
public void gen(){
E1.gen();
Label start = new Label();
Label end = new Label();
emit("ifFalse " + E2.rvalue().toString() + " goto " + end);
S.gen();
E3.gen();
emit("goto " + start);
emit(end + ":")
}
}
```
### 2.8.2
The programming language C does not have a boolean type. Show how a C compiler might translate an if-statement into three-address code.
#### Answer
Replace
```
emit("ifFalse " + E.rvalue().toString() + " goto " + after);
```
with
```
emit("ifEqual " + E.rvalue().toString() + " 0 goto " + after);
```
or
```
emit("ifEqualZero " + E.rvalue().toString() + " goto " + after);
```
================================================
FILE: ch02/key-point/key-point.md
================================================
# 第2章要点
### 1. 文法、语法制导翻译方案、语法制导的翻译器
以一个仅支持个位数加减法的表达式为例
1. 文法
list -> list + digit | list - digit | digit
digit -> 0 | 1 | … | 9
2. (消除了左递归的)语法制导翻译方案
expr -> term rest
rest -> + term { print('+') } rest | - term { print('+') } rest | ε
term -> 0 { print('0') } | 1 { print('1') } | … | 9 { print('9') }
4. 语法制导的翻译器
java代码见 p46
### 2. 语法树、语法分析树
以 2 + 5 - 9 为例

### 3. 正则文法、上下文无关文法、上下文相关文法?
文法缩写:
- RG:[正则文法](http://en.wikipedia.org/wiki/Regular_grammar)
- CFG:[上下文无关文法](http://en.wikipedia.org/wiki/Context-free_grammar)
- CSG:[上下文相关文法](http://en.wikipedia.org/wiki/Context-sensitive_grammar)
#### 正则文法
[wiki](http://en.wikipedia.org/wiki/Regular_grammar)
正则文法在标准之后所有产生式都应该满足下面三种情形中的一种:
B -> a
B -> a C
B -> epsilon
关键点在于:
1. 产生式的左手边必须是一个非终结符。
2. 产生式的右手边可以什么都没有,可以有一个终结符,也可以有一个终结符加一个非终结符。
从产生式的角度看,这样的规定使得每应用一条产生规则,就可以产生出零或一个终结符,直到最后产生出我们要的那个字符串。
从匹配的角度看,这样的规定使得每应用一条规则,就可以消耗掉一个非终结符,直到整个字符串被匹配掉。
这样定义的语言所对应的自动机有一种性质:有限状态自动机。
简单来说就是只需要记录当前的一个状态,和得到下一个输入符号,就可以决定接下来的状态迁移。
#### 正则文法和上下文无关文法
CFG 跟 RG 最大的区别就是,产生式的右手边可以有零或多个终结符或非终结符,顺序和个数都没限制。
想像一个经典例子,括号的配对匹配:
expr -> '(' expr ')' | epsilon
这个产生式里(先只看第一个子产生式),右手边有一个非终结符 expr,但它的左右两侧都有终结符,这种产生式无法被标准化为严格的 RG 。这就是CFG的一个例子。
它对应的自动机就不只要记录当前的一个状态,还得外加记录到达当前位置的历史,才可以根据下一个输入符号决定状态迁移。所谓的“历史”在这里就是存着已匹配规则的栈。
CFG 对应的自动机为 PDA(下推自动机)。
RG 的规定严格,对应的好处是它对应的自动机非常简单,所以可以用非常高效且简单的方式来实现。
#### 上下文相关文法
CSG 在 CFG的基础上进一步放宽限制。
产生式的左手边也可以有终结符和非终结符。左手边的终结符就是“上下文”的来源。也就是说匹配的时候不能光看当前匹配到哪里了,还得看当前位置的左右到底有啥(也就是上下文是啥),上下文在这条规则应用的时候并不会被消耗掉,只是“看看”。
CSG 的再上一层是 PSG,phrase structure grammar。
基本上就是CSG的限制全部取消掉。
左右两边都可以有任意多个、任意顺序的终结符和非终结符。
反正不做自然语言处理的话也不会遇到这种文法,所以具体就不说了。
### 4. 为什么有 n 个运算符的优先级,就对应 n+1 个产生式?
优先级的处理可以在纯文法层面解决,也可以在parser实现中用别的办法处理掉。
纯文法层面书上介绍的,有多少个优先级就有那么多加1个产生式。
书上介绍的四则运算的文法,会使得加减法离根比较近,乘除法离根比较远。
语法树的形状决定了节点的计算顺序,离根远的节点就会先处理,这样看起来就是乘除法先计算,也就是乘除法的优先级更高。
参考:http://rednaxelafx.iteye.com/blog/492667
### 5. 避免二义性文法的有效原则?
二义性问题主要是跟 CFG 的特性有关系的。
CFG 的选择结构("|")是没有规定顺序或者说优先级的,
同时,多个规则可能会有共同前缀,
这样才会有二义性问题。
PEG 是跟CFG类似的一种东西,语言的表达力上跟CFG相似。
但文法层面没有二义性,因为它的选择结构("|")是有顺序或者说有优先级的。
### 6. 避免预测分析器因左递归文法造成的无限循环
产生式:
A -> A x | y
语法制导翻译伪代码片段:
void A(){
switch(lookahead){
case x:
A();match(x);break;
case y:
match(y):break;
default:
report("syntax error")
}
}
当语句符合 A x 形式时, A() 运算会陷入死循环,可以通过将产生式改为等价的非左递归形式来避免:
B -> y C
C -> x C | ε
### 7. 为什么在右递归的文法中,包含了左结合运算符的表达式翻译会比较困难?
### 8. 中间代码生成时的左值和右值问题。
看了书上 lvalue() 和 rvalue() 的伪代码,感觉可以做左值也可以做右值的都由 lvalue() 处理,而对于右值的处理,要么自己处理掉了,对于可以作为左值的右值则调用 lvalue()。
为什么不直接弄个 value() 就结了?
================================================
FILE: ch03/3.1/3.1.md
================================================
# Exercises for Section 3.1
### 3.1.1
Divide the following C++ program:
```
float limitedSquare(x){float x;
/* returns x-squared, nut never more than 100 */
return (x <= -10.0 || x >= 10.0) ? 100 : x*x;
}
```
into appropriate lexemes, using the discussion of Section 3.1.2 as a guide.
Which lexemes should get associated lexical values? What should those values be?
#### Answer
```
<float> <id, limitedSquaare> <(> <id, x> <)> <{>
<float> <id, x>
<return> <(> <id, x> <op,"<="> <num, -10.0> <op, "||"> <id, x> <op, ">="> <num, 10.0> <)> <op, "?"> <num, 100> <op, ":"> <id, x> <op, "*"> <id, x>
<}>
```
### 3.1.2
Tagged languages like HTML or XML are different from conventional programming
languages in that the punctuation (tags) are either very numerous (as in HTML)
or a user-definable set (as in XML). Further, tags can often have parameters.
Suggest how to divide the following HTML document:
```
Here is a photo of <b>my house</b>;
<p><img src="house.gif"/><br/>
see <a href="morePix.html">More Picture</a> if you
liked that one.</p>
```
into appropriate lexemes. Which lexemes should get associated lexical values, and what should those values be?
#### Answer
```
<text, "Here is a photo of"> <nodestart, b> <text, "my house"> <nodeend, b>
<nodestart, p> <selfendnode, img> <selfendnode, br>
<text, "see"> <nodestart, a> <text, "More Picture"> <nodeend, a>
<text, "if you liked that one."> <nodeend, p>
```
================================================
FILE: ch03/3.3/3.3.md
================================================
# Exercises for Section 3.3
### 3.3.1
Consult the language reference manuals to determine
1. the sets of characters that form the input alphabet (excluding those that may only appear in character strings or comments)
2. the lexical form of numerical constants, and
3. the lexical form of identifiers,
for each of the following languages:
1. C
2. C++
3. C#
4. Fortran
5. Java
6. Lisp
7. SQL
### 3.3.2
Describe the languages denoted by the following regular expressions:
1. a(a|b)\*a
2. ((ε|a)b\*)\*
3. (a|b)*a(a|b)(a|b)
4. a\*ba\*ba\*ba\*
5. !! (aa|bb)\*((ab|ba)(aa|bb)\*(ab|ba)(aa|bb)\*)\*
#### Answer
1. String of a's and b's that start and end with a.
2. String of a's and b's.
3. String of a's and b's that the character third from the last is a.
4. String of a's and b's that only contains three b.
5. String of a's and b's that has a even number of a and b.
### 3.3.3
In a string of length n, how many of the following are there?
1. Prefixes.
2. Suffixes.
3. Proper prefixes.
4. ! Substrings.
5. ! Subsequences.
#### Answer
1. n + 1
2. n + 1
3. n - 1
4. C(n+1,2) + 1 (need to count epsilon in)
5. Σ(i=0,n) C(n, i)
### 3.3.4
Most languages are case sensitive, so keywords can be written only one way, and the regular expressions describing their lexeme is very simple. However, some languages, like SQL, are case insensitive, so a keyword can be written either in lowercase or in uppercase, or in any mixture of cases. Thus, the SQL keyword SELECT can also be written select, Select, or sElEcT, for instance. Show how to write a regular expression for a keyword in a case insensitive language. Illustrate the idea by writing the expression for "select" in SQL.
#### Answer
```
select -> [Ss][Ee][Ll][Ee][Cc][Tt]
```
### 3.3.5
!Write regular definitions for the following languages:
1. All strings of lowercase letters that contain the five vowels in order.
2. All strings of lowercase letters in which the letters are in ascending lexicographic order.
3. Comments, consisting of a string surrounded by /* and */, without an intervening */, unless it is inside double-quotes (")
4. !! All strings of digits with no repeated digits. Hint: Try this problem first with a few digits, such as {O, 1, 2}.
5. !! All strings of digits with at most one repeated digit.
6. !! All strings of a's and b's with an even number of a's and an odd number
of b's.
7. The set of Chess moves,in the informal notation,such as p-k4 or kbp*qn.
8. !! All strings of a's and b's that do not contain the substring abb.
9. All strings of a's and b's that do not contain the subsequence abb.
#### Answer
1、
```
want -> other* a (other|a)* e (other|e)* i (other|i)* o (other|o)* u (other|u)*
other -> [bcdfghjklmnpqrstvwxyz]
```
2、
```
a* b* ... z*
```
3、
```
\/\*([^*"]*|".*"|\*+[^/])*\*\/
```
4、
```
want -> 0|A?0?1(A0?1|01)*A?0?|A0?
A -> 0?2(02)*
```
Steps:
step1. Transition diagram

step2. GNFA

step3. Remove node 0 and simplify

step4. Remove node 2 and simplify

step5. Remove node 1 and simplify

5、
```
want -> (FE*G|(aa)*b)(E|FE*G)
E -> b(aa)*b
F -> a(aa)*b
G -> b(aa)*ab|a
F -> ba(aa)*b
```
Steps:
step1. Transition diagram

step2. GNFA

step3. Remove node A and simplify

step4. Remove node D and simplify

step5. Remove node C and simplify

8、
```
b*(a+b?)*
```
9、
```
b* | b*a+ | b*a+ba*
```
### 3.3.6
Write character classes for the following sets of characters:
1. The first ten letters (up to "j") in either upper or lower case.
2. The lowercase consonants.
3. The "digits" in a hexadecimal number (choose either upper or lower case for the "digits" above 9).
4. The characters that can appear at the end of alegitimate English sentence (e.g. , exclamation point) .
#### Answer
1. [A-Ja-j]
2. [bcdfghjklmnpqrstvwxzy]
3. [0-9a-f]
4. [.?!]
### 3.3.7
Note that these regular expressions give all of the following symbols (operator characters) a special meaning:
```
\ " . ^ $ [ ] * + ? { } | /
```
Their special meaning must be turned off if they are needed to represent
themselves in a character string. We can do so by quoting the character within a
string of length one or more; e.g., the regular expression "\*\*" matches the
string \*\* . We can also get the literal meaning of an operator character by
preceding it by a backslash. Thus, the regular expression \\\*\\\* also matches
the string \*\*. Write a regular expression that matches the string "\\.
#### Answer
```
\"\\
```
### 3.3.9 !
The regular expression r{m, n} matches from m to n occurrences of the pattern r.
For example, a [ 1 , 5] matches a string of one to five a's. Show that for every
regular expression containing repetition operators of this form, there is an
equivalent regular expression without repetition operators.
#### Answer
r{m,n} is equals to r.(m).r | r.(m + 1).r | ... | r.(n).r
### 3.3.10 !
The operator ^ matches the left end of a line, and $ matches the right end of a
line. The operator ^ is also used to introduce complemented character classes,
but the context always makes it clear which meaning is intended. For example,
^[^aeiou]*$ matches any complete line that does not contain a lowercase vowel.
1. How do you tell which meaning of ^ is intended?
2. Can you always replace a regular expression using the ^ and $ operators by an equivalent expression that does not use either of these operators?
#### Answer
1. if ^ is in a pair of brakets, and it is the first letter, it means complemented classes, or it means the left end of a line.
================================================
FILE: ch03/3.3/assets/3.3.5-4-1.graphml
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="178.0" y="218.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.1171875" x="34.94140625" y="10.93359375">s<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="41.5" width="83.0" x="315.5" y="303.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">2<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.09638554216867468" nodeRatioY="-0.31485316265060237" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.5" width="81.0" x="315.0" y="218.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">1<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.08641975308641975" nodeRatioY="-0.31028163580246915" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="315.5" y="132.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="38.0" y="18.0">0<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.04742431640625" nodeRatioY="0.4033203125" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="46.5" width="93.0" x="453.0" y="212.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.7060546875" y="7.68359375">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="-0.5" nodeRatioX="-0.20208543346774194" nodeRatioY="-0.33476142473118276" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="466.0" y="218.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="8.412109375" x="27.7060546875" y="7.68359375">f<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<edge id="e0" source="n0" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="42.372956598825226" y="-53.22823704543737">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.06793934812958" distanceToCenter="true" position="left" ratio="0.6058997493694243" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n0" target="n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="41.34071180867852" y="-18.09854377023268">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.117821826049216" distanceToCenter="true" position="left" ratio="0.46070304704889037" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n0" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="38.47472897685179" y="27.191924520424777">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.61605579270569" distanceToCenter="true" position="right" ratio="0.4469360515304319" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n3" target="n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-13.263407514460368" y="14.05629923277752">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.469462201960374" distanceToCenter="true" position="right" ratio="0.519850731801854" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n2" target="n3">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="15.12704031601072" ty="13.030798140883746">
<y:Point x="379.24554443359375" y="205.25657653808594"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="11.859619721341573" y="-24.070841660350595">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.4159245369421285" distanceToCenter="true" position="right" ratio="-5.635567302227557" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-16.528430938720703" ratio="-0.8901098966598511" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e5" source="n0" target="n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="112.23333333333306" y="238.0"/>
<y:Point x="112.23333333333306" y="238.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="30.630859375" x="-59.17780253092462" y="-19.899739583333314">start<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.833333333333348" distanceToCenter="true" position="right" ratio="0.07830263947597497" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n2" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="9.56640625" x="42.001953125" y="-18.042832927980214">ε<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.0" distanceToCenter="true" position="left" ratio="0.4465720546801628" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n1" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="9.56640625" x="43.13822198556818" y="-49.34038540871427">ε<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.930178827349469" distanceToCenter="true" position="left" ratio="0.5612678309436447" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e8" source="n3" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="9.56640625" x="46.164606715170976" y="9.695267496761232">ε<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.117430775082138" distanceToCenter="true" position="left" ratio="0.38875975422475517" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e9" source="n5" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e10" source="n1" target="n3">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="407.4302978515625" y="237.6767120361328"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="31.806643570471408" y="-66.72596818930498">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.178502519972133" distanceToCenter="true" position="right" ratio="0.7946811756415193" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-51.182247161865234" ratio="-1.1954519748687744" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e11" source="n3" target="n1">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="311.0692443847656" y="238.52073669433594"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-29.34593439121312" y="75.52758718013467">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.11158868466314235" distanceToCenter="true" position="left" ratio="0.26140671267929155" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-45.1824836730957" ratio="-1.0553168058395386" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e12" source="n2" target="n1">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-12.408172336764608" y="8.185791015624375">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.915832931839008" distanceToCenter="true" position="right" ratio="0.19451073985676293" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e13" source="n1" target="n2">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="375.98516845703125" y="280.6537780761719"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="5.3039559304293675" y="-40.443674900142696">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="5.909255533587696" distanceToCenter="true" position="right" ratio="0.2481378692754453" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-19.738191604614258" ratio="-0.9232820868492126" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>
================================================
FILE: ch03/3.3/assets/3.3.5-4-2.graphml
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="158.0" y="189.50000000000006"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.1171875" x="34.94140625" y="10.93359375">s<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="41.5" width="83.0" x="295.5" y="325.50000000000006"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">2<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.09638554216867468" nodeRatioY="-0.31485316265060237" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.5" width="81.0" x="295.0" y="189.50000000000006"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">1<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.08641975308641975" nodeRatioY="-0.31028163580246915" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="46.5" width="93.0" x="433.0" y="183.50000000000006"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.7060546875" y="7.68359375">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="-0.5" nodeRatioX="-0.20208543346774194" nodeRatioY="-0.33476142473118276" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="446.0" y="190.00000000000006"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="8.412109375" x="27.7060546875" y="7.68359375">f<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="158.0" y="541.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.1171875" x="34.94140625" y="10.93359375">s<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n6">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="41.5" width="83.0" x="295.5" y="677.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">2<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.09638554216867468" nodeRatioY="-0.31485316265060237" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n7">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.5" width="81.0" x="295.0" y="541.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">1<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.08641975308641975" nodeRatioY="-0.31028163580246915" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n8">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="46.5" width="93.0" x="433.0" y="535.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.7060546875" y="7.68359375">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="-0.5" nodeRatioX="-0.20208543346774194" nodeRatioY="-0.33476142473118276" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n9">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="446.0" y="541.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="8.412109375" x="27.7060546875" y="7.68359375">f<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<edge id="e0" source="n0" target="n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="41.34071180867858" y="-18.098543770232624">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.117821826049216" distanceToCenter="true" position="left" ratio="0.46070304704889037" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n0" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="34.517766564191305" y="41.27668978238182">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.61605579270569" distanceToCenter="true" position="right" ratio="0.4469360515304319" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n0" target="n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="92.23333333333306" y="209.50000000000006"/>
<y:Point x="92.23333333333306" y="209.50000000000006"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="30.630859375" x="-59.17780253092462" y="-19.899739583333286">start<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.833333333333348" distanceToCenter="true" position="right" ratio="0.07830263947597497" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n2" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="9.56640625" x="42.001953125" y="-18.04283292798013">ε<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.0" distanceToCenter="true" position="left" ratio="0.4465720546801628" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n1" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="9.56640625" x="41.78507215760669" y="-67.15124516583626">ε<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.930178827349469" distanceToCenter="true" position="left" ratio="0.5612678309436447" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n4" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n2" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-12.185233095873343" y="38.70520019531256">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.915832931839008" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n1" target="n2">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="351.9513244628906" y="277.82745361328125"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="7.5834885790529825" y="-59.432303039576084">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="5.909255533587696" distanceToCenter="true" position="right" ratio="0.0" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-15.702277183532715" ratio="-0.46011221408843994" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e8" source="n0" target="n3">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="338.0625" y="137.75"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="119.9656696515197" y="-75.40683953713153">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.42157231101975" distanceToCenter="true" position="left" ratio="3.9901062442904722" segment="-2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="70.37835693359375" ratio="1.0" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e9" source="n0" target="n2">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="-17.58021990577106" ty="-10.09115849004877">
<y:Point x="255.49960327148438" y="174.5994873046875"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="33.18585713180249" y="-33.82515437321808">01<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="3.628855357931725" distanceToCenter="true" position="left" ratio="-2.3022027590981735" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="30.080724716186523" ratio="1.0" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e10" source="n0" target="n1">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="243.1046600341797" y="302.6717224121094"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="7.830287771731861" y="59.809229482888384">02<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="18.61071091766012" distanceToCenter="true" position="right" ratio="0.8073424094880786" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-34.78519821166992" ratio="-0.7135747671127319" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e11" source="n2" target="n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="352.5" y="163.00000000000006"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="12.989911990874702" y="-37.40317990915662">01<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e12" source="n2" target="n3">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="407.1248474121094" y="190.2421875"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="48.17765095885619" y="-25.333629565261816">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="5.254264729127662" distanceToCenter="true" position="left" ratio="-0.40211391179668016" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="18.011714935302734" ratio="0.5002169013023376" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e13" source="n2" target="n1">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="304.9389953613281" y="278.3440856933594"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="-39.12301170774509" y="39.521382883166666">02<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.607069058696846" distanceToCenter="true" position="right" ratio="-8.602611907200679" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-31.31289291381836" ratio="-0.9175385236740112" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e14" source="n1" target="n3">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="426.3893127441406" y="295.0294189453125"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="66.01790027308925" y="-45.294297298191566">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.830659753456978" distanceToCenter="true" position="right" ratio="0.9516132532175561" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-25.93016815185547" ratio="-0.5201237201690674" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e15" source="n1" target="n2">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="372.3143310546875" y="277.60369873046875"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="17.327617971418817" y="-82.63059023847518">01<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.531152929194876" distanceToCenter="true" position="right" ratio="0.5025838785699015" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-36.066505432128906" ratio="-1.0568300485610962" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e16" source="n1" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="337.0" y="402.00000000000006"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="10.235250998446531" y="30.563241167412343">02<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.5959992894621686" distanceToCenter="true" position="right" ratio="0.3991120565669844" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e17" source="n5" target="n7">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.23828125" x="35.51263830138237" y="-18.09763991240493">0?1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.117821826049216" distanceToCenter="true" position="left" ratio="0.46070304704889037" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e18" source="n5" target="n6">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.23828125" x="22.192571251691334" y="43.27668978238171">0?2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.249643772934006" distanceToCenter="true" position="right" ratio="0.47640537350579704" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e19" source="n5" target="n5">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="92.23333333333306" y="561.0"/>
<y:Point x="92.23333333333306" y="561.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="30.630859375" x="-59.17780253092462" y="-19.899739583333258">start<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.833333333333348" distanceToCenter="true" position="right" ratio="0.07830263947597497" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e20" source="n7" target="n8">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="23.587890625" x="35.740350037990424" y="-18.058439992573767">0?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.0" distanceToCenter="true" position="left" ratio="0.4465720546801628" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e21" source="n6" target="n8">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="23.587890625" x="34.774329970106805" y="-67.15124516583637">0?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.930178827349469" distanceToCenter="true" position="left" ratio="0.5612678309436447" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e22" source="n9" target="n8">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-33.5" y="-16.75">
<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e23" source="n7" target="n6">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.23828125" x="-25.510428408373286" y="35.70520019531364">0?2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.88244527322075" distanceToCenter="true" position="right" ratio="0.4554679345935466" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e24" source="n6" target="n7">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="351.9513244628906" y="629.3274536132812"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.23828125" x="10.258293266552982" y="-60.43230303957603">0?1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.892337689178829" distanceToCenter="true" position="right" ratio="-1.1420310792179051" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-15.702277183532715" ratio="-0.46011221408843994" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e25" source="n5" target="n8">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="338.0625" y="489.25"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="119.96566965151976" y="-75.40682427834241">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.42157231101975" distanceToCenter="true" position="left" ratio="3.9901062442904722" segment="-2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="70.37835693359375" ratio="1.0" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e26" source="n7" target="n7">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="335.5" y="514.5"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="2.2110595703125" y="-40.31805419921875">01<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e27" source="n6" target="n6">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="337.0" y="753.5"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="10.235250998446531" y="30.563180132256093">02<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.5959992894621686" distanceToCenter="true" position="right" ratio="0.3991120565669844" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>
================================================
FILE: ch03/3.3/assets/3.3.5-4-3.graphml
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="111.5" y="540.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.1171875" x="34.94140625" y="10.93359375">s<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.5" width="81.0" x="248.5" y="540.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">1<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.08641975308641975" nodeRatioY="-0.31028163580246915" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="46.5" width="93.0" x="386.5" y="534.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.7060546875" y="7.68359375">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="-0.5" nodeRatioX="-0.20208543346774194" nodeRatioY="-0.33476142473118276" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="399.5" y="540.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="8.412109375" x="27.7060546875" y="7.68359375">f<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="98.5" y="792.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.1171875" x="34.94140625" y="10.93359375">s<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.5" width="81.0" x="248.5" y="792.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">1<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="-0.08641975308641975" nodeRatioY="-0.31028163580246915" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n6">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="46.5" width="93.0" x="399.5" y="786.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.7060546875" y="7.68359375">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="-0.5" nodeRatioX="-0.20208543346774194" nodeRatioY="-0.33476142473118276" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n7">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="412.5" y="792.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="8.412109375" x="27.7060546875" y="7.68359375">f<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<edge id="e0" source="n0" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.23828125" x="35.51263830138234" y="-18.09763991240493">0?1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.117821826049216" distanceToCenter="true" position="left" ratio="0.46070304704889037" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n0" target="n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="45.733333333333064" y="560.0"/>
<y:Point x="45.733333333333064" y="560.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="30.630859375" x="-59.17780253092462" y="-19.899739583333258">start<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.833333333333348" distanceToCenter="true" position="right" ratio="0.07830263947597497" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n1" target="n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="23.587890625" x="35.740350037990424" y="-18.058439992573767">0?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.0" distanceToCenter="true" position="left" ratio="0.4465720546801628" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n3" target="n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-33.5" y="-16.75">
<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n0" target="n2">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="291.0350341796875" y="434.2551574707031"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="121.57796199348178" y="-125.78668351095666">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.42157231101975" distanceToCenter="true" position="left" ratio="3.9901062442904722" segment="-2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="124.37577819824219" ratio="1.7672446966171265" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e5" source="n1" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="289.0" y="513.5"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="2.2110595703125" y="-40.31805419921875">01<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n0" target="n1">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="220.21432495117188" y="579.7498168945312"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="73.240234375" x="12.839268101961807" y="8.71073560842865">0?2(02)*0?1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.301279442311793" distanceToCenter="true" position="right" ratio="-3.1494656852129763" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-19.624876022338867" ratio="-0.570904552936554" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e7" source="n0" target="n2">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="292.87872314453125" y="622.983154296875"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="65.65234375" x="99.40430588790423" y="50.217874140362824">0?2(02)*0?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="5.858217096511604" distanceToCenter="true" position="right" ratio="9.323491500877228" segment="-2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-64.36119842529297" ratio="-0.9145026803016663" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e8" source="n1" target="n1">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="-18.25">
<y:Point x="289.0" y="485.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="73.240234375" x="-58.1297607421875" y="-86.3514404296875">0?2(02)*0?1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="2.0" distanceToCenter="true" position="right" ratio="-7.533203125" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e9" source="n1" target="n2">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="361.39532470703125" y="577.7261352539062"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="65.65234375" x="18.01942404331362" y="7.675935233866539">0?2(02)*0?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.809431160737172" distanceToCenter="true" position="right" ratio="0.9275841256419719" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-18.980255126953125" ratio="-0.5271149277687073" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e10" source="n4" target="n5">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="86.107421875" x="12.3971129224025" y="-18.09212965258837">(0?2(02)*)?0?1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.117821826049216" distanceToCenter="true" position="left" ratio="0.46070304704889037" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e11" source="n4" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="32.733333333333064" y="812.0"/>
<y:Point x="32.733333333333064" y="812.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="30.630859375" x="-59.17781016031915" y="-19.899739583333258">start<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.833333333333348" distanceToCenter="true" position="right" ratio="0.07830263947597497" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e12" source="n5" target="n6">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="85.45703125" x="12.788525254326714" y="-18.12870179824222">(0?2(02)*)?0?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.0" distanceToCenter="true" position="left" ratio="0.4465720546801628" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e13" source="n7" target="n6">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-33.5" y="-16.75">
<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e14" source="n4" target="n6">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="291.4124450683594" y="716.9725952148438"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="133.5679780856285" y="-97.35962344931784">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.42157231101975" distanceToCenter="true" position="left" ratio="3.9901062442904722" segment="-2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="93.6561279296875" ratio="1.2182424068450928" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e15" source="n4" target="n6">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="292.6272277832031" y="852.8058471679688"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="65.65234375" x="110.97818339760374" y="30.814457937512543">0?2(02)*0?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="5.858217096511293" distanceToCenter="true" position="right" ratio="9.323491500877344" segment="-2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-42.182559967041016" ratio="-0.5486943125724792" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e16" source="n5" target="n5">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="-18.25">
<y:Point x="289.0" y="755.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="100.4921875" x="-71.13006591796875" y="-66.58514404296875">0?2(02)*0?1 | 01<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="2.0" distanceToCenter="true" position="right" ratio="-7.533203125" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>
================================================
FILE: ch03/3.3/assets/3.3.5-4-4.graphml
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="73.5" y="710.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.1171875" x="34.94140625" y="10.93359375">s<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="46.5" width="93.0" x="349.5" y="704.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.7060546875" y="7.68359375">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="-0.5" nodeRatioX="-0.20208543346774194" nodeRatioY="-0.33476142473118276" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="362.5" y="710.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="8.412109375" x="27.7060546875" y="7.68359375">f<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<edge id="e0" source="n0" target="n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="7.733333333333064" y="730.0"/>
<y:Point x="7.733333333333064" y="730.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="30.630859375" x="-59.177810160319154" y="-19.89973958333337">start<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.833333333333348" distanceToCenter="true" position="right" ratio="0.07830263947597497" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n2" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-33.5" y="-16.75">
<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n0" target="n1">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="46.3984375" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="178.005859375" x="29.03033447265625" y="-24.348245644358258">0 | A?0?1(A0?1|01)*A?0? | A0?
A = 0?2(02)*<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.006963518052107" distanceToCenter="true" position="center" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>
================================================
FILE: ch03/3.3/assets/3.3.5-4.graphml
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="178.0" y="218.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="free" modelPosition="anywhere" textColor="#000000" visible="true" width="10.1171875" x="34.94140625" y="10.93359375">s</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="315.0" y="130.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="free" modelPosition="anywhere" textColor="#000000" visible="true" width="4.0" x="38.0" y="18.0"/>
</y:GenericNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="322.0" y="134.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="free" modelPosition="anywhere" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">0</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="315.0" y="221.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="free" modelPosition="anywhere" textColor="#000000" visible="true" width="4.0" x="38.0" y="18.0"/>
</y:GenericNode>
</data>
</node>
<node id="n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="322.0" y="225.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="free" modelPosition="anywhere" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">1</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="40.0" width="80.0" x="316.0" y="307.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="free" modelPosition="anywhere" textColor="#000000" visible="true" width="4.0" x="38.0" y="18.0"/>
</y:GenericNode>
</data>
</node>
<node id="n6">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="33.5" width="67.0" x="323.0" y="311.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="free" modelPosition="anywhere" textColor="#000000" visible="true" width="11.587890625" x="27.7060546875" y="7.68359375">2</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<edge id="e0" source="n0" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="41.715413411458314" y="-53.92643229166666">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.06793934812958" distanceToCenter="true" position="left" ratio="0.6058997493694243" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n0" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="44.56563313802076" y="-16.814175322561596">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.117821826049216" distanceToCenter="true" position="left" ratio="0.46070304704889037" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n0" target="n6">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="40.83409016927084" y="30.22456499781424">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.61605579270569" distanceToCenter="true" position="right" ratio="0.4469360515304319" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n1" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-13.11088725271054" y="18.94141438802012">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.469462201960374" distanceToCenter="true" position="right" ratio="0.519850731801854" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n4" target="n2">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="375.75" y="196.25"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="13.513901774088595" y="-38.991910807291674">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.150769036775824" distanceToCenter="true" position="right" ratio="1.7375216807687237" segment="-2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-20.25" ratio="-0.8901098966598511" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e5" source="n4" target="n6">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="355.5029602050781" y="284.7557678222656"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-12.756217153938678" y="17.341485076432207">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.772228077801196" distanceToCenter="true" position="right" ratio="0.0" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-0.4970594644546509" ratio="-0.02311748079955578" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e6" source="n0" target="n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="112.23333333333306" y="238.0"/>
<y:Point x="112.23333333333306" y="238.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="30.630859375" x="-59.17780253092462" y="-19.899739583333314">start<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.833333333333348" distanceToCenter="true" position="right" ratio="0.07830263947597497" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n6" target="n2">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="409.74688720703125" y="238.94635009765625"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="37.469091562407584" y="-70.79273856677264">0<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.376624071850083" distanceToCenter="true" position="right" ratio="0.7981185785635715" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-53.74773025512695" ratio="-1.2146185636520386" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e8" source="n2" target="n6">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="312.2528076171875" y="239.49716186523438"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-31.004553142484838" y="80.7884271606419">2<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.8553706619893395" distanceToCenter="true" position="center" ratio="0.23594899741079325" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-43.74787521362305" ratio="-0.9886367917060852" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e9" source="n6" target="n4">
<data key="d9"/>
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="374.5643615722656" y="284.5341491699219"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="6.656984337268568" y="-39.33574918591199">1<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="3.905765164161428" distanceToCenter="true" position="right" ratio="-0.8497092415402838" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-18.56560516357422" ratio="-0.8634581565856934" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>
================================================
FILE: ch03/3.3/assets/3.3.5-5-1.graphml
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="45.0" width="90.0" x="79.5" y="708.75"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="12.279296875" x="38.8603515625" y="13.43359375">A<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="45.5" width="91.0" x="223.5" y="708.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.90234375" x="40.048828125" y="13.68359375">B<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="43.5" width="87.0" x="348.5" y="711.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="39.43811217350748" y="19.75">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="44.0" width="88.0" x="225.0" y="853.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="12.302734375" x="37.8486328125" y="12.93359375">C<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="45.0" width="90.0" x="79.5" y="853.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="12.98828125" x="38.505859375" y="13.43359375">D<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="34.5" width="69.0" x="357.5" y="715.5"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="8.412109375" x="28.658654967350742" y="8.18359375">f<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="-0.023699860074626877" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n6">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start2">
<y:Geometry height="41.0" width="82.0" x="-33.0" y="712.0"/>
<y:Fill color="#FFFFFF" color2="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="10.1171875" x="35.94140625" y="11.43359375">s<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<edge id="e0" source="n0" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.552734375" x="43.7513427734375" y="-3.06640625">b<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n1" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="10.626953125" x="-11.3134765625" y="38.33366481749181">a<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.0" distanceToCenter="true" position="right" ratio="0.4707462004342361" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n3" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.552734375" x="-55.5479736328125" y="-17.894257564072404">b<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.000017526969687" distanceToCenter="true" position="right" ratio="0.5" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n4" target="n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="10.626953125" x="2.7143022320802714" y="-56.68756103515602">a<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.027778794580277" distanceToCenter="true" position="right" ratio="0.4718774030539359" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n1" target="n0">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="196.75" y="713.8005981445312"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.552734375" x="-53.10543028184273" y="-26.28342356151552">b<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.980961011501984" distanceToCenter="true" position="right" ratio="0.8736861694856091" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-17.449411392211914" ratio="-0.48302870988845825" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e5" source="n3" target="n1">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="289.0690002441406" y="803.125"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="10.626953125" x="11.19182812008171" y="-58.7203256984734">a<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.2976794385022865" distanceToCenter="true" position="right" ratio="0.9815789269013332" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-20.068994522094727" ratio="-0.5584415793418884" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e6" source="n4" target="n3">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="196.81362915039062" y="893.6390991210938"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.552734375" x="50.93496441215069" y="12.385287485286653">b<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.027072272329567" distanceToCenter="true" position="right" ratio="0.13282908607531826" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:Arc height="-18.389230728149414" ratio="-0.5090413689613342" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e7" source="n0" target="n4">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="101.65668487548828" y="803.375"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="10.626953125" x="-24.562172148894902" y="36.91044760901639">a<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled=
gitextract_pa2oc77t/
├── .gitignore
├── README.md
├── ch01/
│ ├── 1.1/
│ │ └── 1.1.md
│ ├── 1.3/
│ │ └── 1.3.md
│ └── 1.6/
│ └── 1.6.md
├── ch02/
│ ├── 2.2/
│ │ └── 2.2.md
│ ├── 2.3/
│ │ └── 2.3.md
│ ├── 2.4/
│ │ ├── 2.4.1.1.c
│ │ ├── 2.4.1.2.c
│ │ ├── 2.4.1.3.c
│ │ └── 2.4.md
│ ├── 2.6/
│ │ └── 2.6.md
│ ├── 2.8/
│ │ └── 2.8.md
│ └── key-point/
│ └── key-point.md
├── ch03/
│ ├── 3.1/
│ │ └── 3.1.md
│ ├── 3.3/
│ │ ├── 3.3.md
│ │ └── assets/
│ │ ├── 3.3.5-4-1.graphml
│ │ ├── 3.3.5-4-2.graphml
│ │ ├── 3.3.5-4-3.graphml
│ │ ├── 3.3.5-4-4.graphml
│ │ ├── 3.3.5-4.graphml
│ │ ├── 3.3.5-5-1.graphml
│ │ ├── 3.3.5-5-2.graphml
│ │ ├── 3.3.5-5-3.graphml
│ │ ├── 3.3.5-5-4.graphml
│ │ └── 3.3.5-5.graphml
│ ├── 3.4/
│ │ ├── 3.4.md
│ │ ├── assets/
│ │ │ ├── 3.4.1-1-dfa.graphml
│ │ │ ├── 3.4.1-1-nfa.graphml
│ │ │ ├── 3.4.1-1.graphml
│ │ │ ├── 3.4.1-2.graphml
│ │ │ ├── 3.4.1-3-nfa.graphml
│ │ │ ├── 3.4.1-3.graphml
│ │ │ └── 3.4.1-4.graphml
│ │ └── src/
│ │ ├── failure-function.js
│ │ └── kmp.js
│ ├── 3.5/
│ │ ├── 3.5.md
│ │ └── src/
│ │ ├── lex.l
│ │ ├── lex2.l
│ │ └── lex3.l
│ ├── 3.6/
│ │ ├── 3.6.md
│ │ └── assets/
│ │ └── 3.6.1.graphml
│ ├── 3.7/
│ │ ├── 3.7.md
│ │ └── assets/
│ │ ├── 3.7.1-1.graphml
│ │ ├── 3.7.1-2.graphml
│ │ ├── 3.7.1-3.graphml
│ │ ├── 3.7.3-4-dfa.graphml
│ │ └── 3.7.3-4-nfa.graphml
│ ├── 3.8/
│ │ ├── 3.8.md
│ │ └── assets/
│ │ ├── 3.8.1-dfa.graphml
│ │ ├── 3.8.1-nfa.graphml
│ │ ├── 3.8.2-nfa.graphml
│ │ ├── 3.8.3-1.graphml
│ │ └── 3.8.3-2.graphml
│ ├── 3.9/
│ │ ├── 3.9.md
│ │ └── assets/
│ │ ├── 3.9.2-1-1.graphml
│ │ ├── 3.9.2-1-2.graphml
│ │ └── 3.9.2-1-dfa.graphml
│ └── key-point/
│ └── key-point.md
├── ch04/
│ ├── 4.2/
│ │ ├── 4.2.md
│ │ └── assets/
│ │ └── 4.2.1.graphml
│ ├── 4.3/
│ │ └── 4.3.md
│ ├── 4.4/
│ │ ├── 4.4.md
│ │ └── cs.columbia.edu-aho-cs3261-properties-of-cfl-121008.html
│ ├── 4.5/
│ │ └── 4.5.md
│ ├── 4.6/
│ │ ├── 4.6.md
│ │ └── assets/
│ │ ├── 4.6.1-1.graphml
│ │ ├── 4.6.1-2.graphml
│ │ └── 4.6.1-3.graphml
│ ├── 4.7/
│ │ └── 4.7.md
│ └── key-point/
│ └── key-point.md
├── ch05/
│ ├── 5.1/
│ │ ├── 5.1.md
│ │ └── assets/
│ │ ├── 5.1.1-1.graphml
│ │ ├── 5.1.1-2.graphml
│ │ ├── 5.1.3-1.graphml
│ │ └── 5.1.3-2.graphml
│ ├── 5.2/
│ │ ├── 5.2.1.js
│ │ ├── 5.2.md
│ │ └── assets/
│ │ └── 5.2.2-1.graphml
│ ├── 5.3/
│ │ └── 5.3.md
│ ├── 5.4/
│ │ └── 5.4.md
│ └── 5.5/
│ └── 5.5.md
├── ch06/
│ ├── 6.1/
│ │ ├── 6.1.md
│ │ └── assets/
│ │ ├── 6.1.1.graphml
│ │ ├── 6.1.2-1.graphml
│ │ ├── 6.1.2-2.graphml
│ │ └── 6.1.2-3.graphml
│ ├── 6.2/
│ │ ├── 6.2.md
│ │ └── assets/
│ │ └── 6.2.1.graphml
│ ├── 6.3/
│ │ └── 6.3.md
│ ├── 6.4/
│ │ ├── 6.4.md
│ │ └── assets/
│ │ ├── 6.4.3-1.graphml
│ │ └── 6.4.3-2.graphml
│ ├── 6.5/
│ │ └── 6.5.md
│ ├── 6.6/
│ │ └── 6.6.md
│ └── 6.7/
│ ├── 6.7.md
│ └── assets/
│ └── 6.7.1-1.graphml
├── ch07/
│ ├── 7.2/
│ │ ├── 7.2.6.c
│ │ ├── 7.2.md
│ │ └── assets/
│ │ ├── 7.2.1-1.graphml
│ │ ├── 7.2.3-1.graphml
│ │ ├── 7.2.3-2.graphml
│ │ ├── 7.2.3-3.graphml
│ │ └── 7.2.4.graphml
│ ├── 7.3/
│ │ ├── 7.3.md
│ │ └── assets/
│ │ ├── 7.3.1-activation-stack.graphml
│ │ ├── 7.3.1-activation-tree.graphml
│ │ └── 7.3.2.graphml
│ ├── 7.4/
│ │ └── 7.4.md
│ ├── 7.5/
│ │ ├── 7.5.md
│ │ └── assets/
│ │ ├── 7.5.1-1.graphml
│ │ ├── 7.5.1-2.graphml
│ │ ├── 7.5.1-3.graphml
│ │ └── 7.5.2.graphml
│ ├── 7.6/
│ │ └── 7.6.md
│ └── 7.7/
│ ├── 7.7.md
│ └── assets/
│ ├── 7.7.1-1.graphml
│ └── 7.7.1-2.graphml
├── ch08/
│ ├── 8.2/
│ │ └── 8.2.md
│ ├── 8.3/
│ │ └── 8.3.md
│ ├── 8.4/
│ │ ├── 8.4.md
│ │ └── assets/
│ │ ├── 8.4.1-2.graphml
│ │ └── 8.4.2-2.graphml
│ └── 8.5/
│ ├── 8.5.md
│ └── assets/
│ ├── 8.5.1.graphml
│ ├── 8.5.3.graphml
│ └── 8.5.4.graphml
├── ch12/
│ ├── 12.3/
│ │ └── 12.3.md
│ └── 12.7/
│ └── 12.7.md
└── src/
└── lexer/
├── Lexer.java
├── Num.java
├── Rel.java
├── SyntaxException.java
├── Tag.java
├── Token.java
└── Word.java
SYMBOL INDEX (31 symbols across 14 files)
FILE: ch02/2.4/2.4.1.1.c
function gettoken (line 28) | int gettoken(void) {
function s (line 32) | void s(void) {
function main (line 45) | int main(void) {
FILE: ch02/2.4/2.4.1.2.c
function gettoken (line 34) | int gettoken(void) {
function s (line 39) | void s(void) {
function r (line 43) | void r(void) {
function main (line 56) | int main(void) {
FILE: ch02/2.4/2.4.1.3.c
function gettoken (line 27) | int gettoken(void) {
function s (line 32) | void s(void) {
function r (line 41) | void r(void) {
function main (line 58) | int main(void) {
FILE: ch03/3.4/src/failure-function.js
function failureFunction (line 3) | function failureFunction(str) {
FILE: ch03/3.4/src/kmp.js
function kmp (line 5) | function kmp(str, search) {
FILE: ch05/5.2/5.2.1.js
function arrange (line 4) | function arrange(arr, pre, rt) {
function filter (line 31) | function filter(arr) {
FILE: ch07/7.2/7.2.6.c
function f (line 3) | int f(int x, int *py, int **ppz) {
function main (line 11) | int main() {
FILE: src/lexer/Lexer.java
class Lexer (line 6) | public class Lexer {
method Lexer (line 12) | public Lexer(InputStream stream){
method reserve (line 18) | private void reserve(Word t){
method scan (line 22) | public Token scan() throws IOException, SyntaxException{
FILE: src/lexer/Num.java
class Num (line 3) | public class Num extends Token {
method Num (line 5) | public Num(float v){
FILE: src/lexer/Rel.java
class Rel (line 3) | public class Rel extends Token{
method Rel (line 5) | public Rel(String s){
FILE: src/lexer/SyntaxException.java
class SyntaxException (line 3) | public class SyntaxException extends Exception {
FILE: src/lexer/Tag.java
class Tag (line 3) | public class Tag {
FILE: src/lexer/Token.java
class Token (line 3) | public class Token{
method Token (line 5) | public Token(int t){
FILE: src/lexer/Word.java
class Word (line 3) | public class Word extends Token{
method Word (line 5) | public Word(int t, String s){
Condensed preview — 136 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,408K chars).
[
{
"path": ".gitignore",
"chars": 53,
"preview": ".DS_Store\n.project\n.settings\n.classpath\nbuild/\n*.out\n"
},
{
"path": "README.md",
"chars": 1316,
"preview": "# Compilers Principles, Techniques, & Tools (purple dragon book) second edition exercise answers\n# 编译原理(紫龙书)中文第2版习题答"
},
{
"path": "ch01/1.1/1.1.md",
"chars": 1705,
"preview": "# Exercises for Section 1.1\n\n### 1.1.1\n\nWhat is the difference between a compiler and an interpreter?\n\n#### Answer\n\nA co"
},
{
"path": "ch01/1.3/1.3.md",
"chars": 438,
"preview": "# Exercises for Section 1.3\n\n### 1.3.1\n\nIndicate which of the following terms:\n\na. imperative\nb. declarative\nc. von Neum"
},
{
"path": "ch01/1.6/1.6.md",
"chars": 1273,
"preview": "# Exercises for Section 1.6\n\n### 1.6.1\n\nFor the block-structured C code below, indicate the values assigned to w, x, y, "
},
{
"path": "ch02/2.2/2.2.md",
"chars": 5712,
"preview": "# Exercises for Section 2.2\n\n### 2.2.1\n\nConsider the context-free grammar:\n\nS -> S S + | S S * | a\n\n1. Show how the stri"
},
{
"path": "ch02/2.3/2.3.md",
"chars": 4465,
"preview": "# 2.3 Exercises for Section 2.3\n\n### 2.3.1\n\nConstruct a syntax-directed translation scheme that translates arithmetic\nex"
},
{
"path": "ch02/2.4/2.4.1.1.c",
"chars": 1334,
"preview": "/* \n Compile with:\n gcc -Wall -o parser 2.4.1.1.c\n Run: ./parser\n\n The code will quitely parse well-formed exp"
},
{
"path": "ch02/2.4/2.4.1.2.c",
"chars": 1220,
"preview": "/*\n Compile with:\n gcc -Wall -o parser 2.4.1.2.c\n Run: ./parser\n\n The grammar given cannot be used as is, since"
},
{
"path": "ch02/2.4/2.4.1.3.c",
"chars": 1759,
"preview": "/* \n Compile with:\n gcc -Wall -o parser 2.4.1.3.c\n Run: ./parser\n\n Again, the grammar given cannot be used as"
},
{
"path": "ch02/2.4/2.4.md",
"chars": 1055,
"preview": "## Exercises for Section 2.4\n\n### 2.4.1\n\nConstruct recursive-descent parsers, starting with the following grammars:\n\n1. "
},
{
"path": "ch02/2.6/2.6.md",
"chars": 2455,
"preview": "# Exercises for Section 2.6\n\n### 2.6.1\n\nExtend the lexical analyzer in Section 2.6.5 to remove comments, defined as\nfoll"
},
{
"path": "ch02/2.8/2.8.md",
"chars": 1541,
"preview": "# Exercises for Section 2.8\n\n### 2.8.1\n\nFor-statements in C and Java have the form:\n\nfor ( exprl ; expr2 ; expr3 ) stmt\n"
},
{
"path": "ch02/key-point/key-point.md",
"chars": 2831,
"preview": "# 第2章要点\n\n### 1. 文法、语法制导翻译方案、语法制导的翻译器\n\n以一个仅支持个位数加减法的表达式为例\n\n1. 文法\n\n list -> list + digit | list - digit | digit\n \n "
},
{
"path": "ch03/3.1/3.1.md",
"chars": 1434,
"preview": "# Exercises for Section 3.1\n\n### 3.1.1\n\nDivide the following C++ program:\n\n```\nfloat limitedSquare(x){float x;\n /* retu"
},
{
"path": "ch03/3.3/3.3.md",
"chars": 6710,
"preview": "# Exercises for Section 3.3\n\n### 3.3.1\n\nConsult the language reference manuals to determine\n\n1. the sets of characters t"
},
{
"path": "ch03/3.3/assets/3.3.5-4-1.graphml",
"chars": 26836,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-4-2.graphml",
"chars": 51609,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-4-3.graphml",
"chars": 34656,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-4-4.graphml",
"chars": 8676,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-4.graphml",
"chars": 20891,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-5-1.graphml",
"chars": 24519,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-5-2.graphml",
"chars": 25007,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-5-3.graphml",
"chars": 40967,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-5-4.graphml",
"chars": 14281,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.3/assets/3.3.5-5.graphml",
"chars": 21107,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/3.4.md",
"chars": 6482,
"preview": "# 3.4 节的练习\n\n### 3.4.1\n\n给出识别练习 3.3.2 中各个正则表达式所描述的语言状态转换图。\n\n#### 解答\n\n解答步骤:NFA -> DFA -> 最少状态的 DFA(状态转换图)\n\n1. a(a|b)*a\n\n "
},
{
"path": "ch03/3.4/assets/3.4.1-1-dfa.graphml",
"chars": 16813,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/assets/3.4.1-1-nfa.graphml",
"chars": 30643,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/assets/3.4.1-1.graphml",
"chars": 12459,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/assets/3.4.1-2.graphml",
"chars": 15986,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/assets/3.4.1-3-nfa.graphml",
"chars": 55097,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/assets/3.4.1-3.graphml",
"chars": 38000,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/assets/3.4.1-4.graphml",
"chars": 14818,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.4/src/failure-function.js",
"chars": 333,
"preview": "module.exports = failureFunction\n\nfunction failureFunction(str) {\n var failure = [0]\n var j = 0\n for (var i = 1"
},
{
"path": "ch03/3.4/src/kmp.js",
"chars": 443,
"preview": "var failureFunction = require('./failure-function')\n\nmodule.exports = kmp\n\nfunction kmp(str, search) {\n var failure ="
},
{
"path": "ch03/3.5/3.5.md",
"chars": 2015,
"preview": "# Exercises for Section 3.5\n\n### 3.5.1\n\nDescribe how to make the following modifications to the Lex\nprogram of Fig. 3.23"
},
{
"path": "ch03/3.5/src/lex.l",
"chars": 1399,
"preview": "%{\n/* definitions of manifest constants */\nLT, LE, EQ, NE, GT, GE,\nIF, THEN, ELSE, ID, NUMBER, RELOP, WHILE\n%}\n/* regula"
},
{
"path": "ch03/3.5/src/lex2.l",
"chars": 454,
"preview": "%{\n%}\n\ndelim \t[ \\t]\nws \t\t\t{delim}+\nletter \t[a-zA-Z]\nword \t{letter}+\n\n%%\n{ws} { printf(\"%s\", yytext); }\n{word} { \n\tif ("
},
{
"path": "ch03/3.5/src/lex3.l",
"chars": 790,
"preview": "%{\n\n%}\n\nletter \t[a-zA-Z]\ndigit \t[0-9]\n\n/* [w-W][h-H][i-I][l-L][e-E] works too. */\nwhile \t(?i:while)\n\nfrom\t(?i:from)\nsele"
},
{
"path": "ch03/3.6/3.6.md",
"chars": 3055,
"preview": "# 3.6 Exercises for Section 3.6\n\n### 3.6.1 !\n\nFigure 3.19 in the exercises of Section 3.4 computes the failure\nfunction "
},
{
"path": "ch03/3.6/assets/3.6.1.graphml",
"chars": 32471,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.7/3.7.md",
"chars": 5250,
"preview": "# Exercises for Section 3.7\n\n### 3.7.1\n\nConvert to DFA's the NFA's of:\n\r1. Fig. 3.26.\n2. Fig. 3.29.\n3. Fig. 3.30.\n\n#### "
},
{
"path": "ch03/3.7/assets/3.7.1-1.graphml",
"chars": 11608,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.7/assets/3.7.1-2.graphml",
"chars": 15949,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.7/assets/3.7.1-3.graphml",
"chars": 6938,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.7/assets/3.7.3-4-dfa.graphml",
"chars": 32853,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.7/assets/3.7.3-4-nfa.graphml",
"chars": 38602,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.8/3.8.md",
"chars": 1978,
"preview": "# Exercises for Section 3.8\n\n### 3.8.1\n\nSuppose we have two tokens: (1) the keyword if, and (2)\nidentifiers, which are "
},
{
"path": "ch03/3.8/assets/3.8.1-dfa.graphml",
"chars": 17426,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.8/assets/3.8.1-nfa.graphml",
"chars": 18039,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.8/assets/3.8.2-nfa.graphml",
"chars": 39939,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.8/assets/3.8.3-1.graphml",
"chars": 15771,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.8/assets/3.8.3-2.graphml",
"chars": 7628,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.9/3.9.md",
"chars": 3203,
"preview": "# Exercises for Section 3.9\n\n### 3.9.1\n\nExtend the table of Fig. 3.58 to include the operators\n\n1. ?\n2. +\n\n#### Answer\n\n"
},
{
"path": "ch03/3.9/assets/3.9.2-1-1.graphml",
"chars": 17404,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.9/assets/3.9.2-1-2.graphml",
"chars": 27394,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/3.9/assets/3.9.2-1-dfa.graphml",
"chars": 7689,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch03/key-point/key-point.md",
"chars": 477,
"preview": "# 第3章要点\n\n### 1. 从 NFA、DFA 到正则表达式的转换\n\nhttp://courses.engr.illinois.edu/cs373/sp2009/lectures/lect_08.pdf\n\n### 2. KMP 及其扩展"
},
{
"path": "ch04/4.2/4.2.md",
"chars": 8035,
"preview": "# Exercises for Section 4.2\n\n### 4.2.1\n\nConsider the context-free grammar:\n\n```\nS -> S S + | S S * | a\n```\n\nand the stri"
},
{
"path": "ch04/4.2/assets/4.2.1.graphml",
"chars": 23793,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch04/4.3/4.3.md",
"chars": 3147,
"preview": "# 4.3 节的练习\n\n### 4.3.1\n\n下面是一个只包含符号 a 和 b 的正则表达式文法。它使用 + 替代表示并运算的字符 | ,以避免和文法中作为元符号使用的竖线相混淆:\n\n rexpr -> rexpr + rterm |"
},
{
"path": "ch04/4.4/4.4.md",
"chars": 12194,
"preview": "# 4.4 节的练习\n\n### 4.4.1\n\n为下面的每个文法设计一个预测分析器,并给出预测分析表。你可能先要对文法进行提取左公因子或者消除左递归的操作。\n\n练习 4.2.2 中 1 - 7 中的文法。\n\n#### 解答\n\n1. S -> "
},
{
"path": "ch04/4.4/cs.columbia.edu-aho-cs3261-properties-of-cfl-121008.html",
"chars": 10906,
"preview": "<html><head>\n<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\">\n <title>Lecture 10: October 8, 201"
},
{
"path": "ch04/4.5/4.5.md",
"chars": 3982,
"preview": "# 4.5 节的练习\n\n### 4.5.1\n\n对于练习 4.2.2(a)中的文法 S -> 0 S 1 | 0 1,指出下面各个最右句型的句柄。\n\n1. 000111\n2. 00S11\n\n#### 解答\n\n1. 01\n2. 0S1\n\n###"
},
{
"path": "ch04/4.6/4.6.md",
"chars": 7465,
"preview": "# 4.6 节的练习\n\n### 4.6.1\n\n描述下列文法的所有可行前缀\n\n1. 练习4.2.2-1的文法 S->0S1|01\n2. ! 练习4.2.1的文法 S->SS+|SS*|a\n3. ! 练习4.2.2-3的文法 S->S(S)S|"
},
{
"path": "ch04/4.6/assets/4.6.1-1.graphml",
"chars": 24750,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch04/4.6/assets/4.6.1-2.graphml",
"chars": 29429,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch04/4.6/assets/4.6.1-3.graphml",
"chars": 28675,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch04/4.7/4.7.md",
"chars": 410,
"preview": "# 4.7 节的练习\n\n### 4.7.1\n\n为练习 4.2.1 的文法 S -> S S + | S S * | a 构造\n\n1. 规范 LR 项集族\n2. LALR 项集族\n\n### 4.7.2\n\n对练习 4.2.2-1 ~ 4.4.2"
},
{
"path": "ch04/key-point/key-point.md",
"chars": 1304,
"preview": "# 第4章要点\n\n### !LR(0), SLR, LR, LALR 之间的区别\n\np157: LR(0) 自动机是如何做出移入-规约决定的?假设文法符号串 γ 使得 LR(0) 自动机从开始状态 0 运行到某个状态 j,那么如果下一个输入"
},
{
"path": "ch05/5.1/5.1.md",
"chars": 2082,
"preview": "# 5.1 节的练习\n\n### 5.1.1\n\n对于图 5-1 中的 SDD,给出下列表达式对应的注释语法分析树\n\n1. (3+4)\\*(5+6)n\n2. 1\\*2\\*3\\*(4+5)n\n3. (9+8\\*(7+6)+5)\\*4n\n\n####"
},
{
"path": "ch05/5.1/assets/5.1.1-1.graphml",
"chars": 71709,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch05/5.1/assets/5.1.1-2.graphml",
"chars": 67149,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch05/5.1/assets/5.1.3-1.graphml",
"chars": 110798,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch05/5.1/assets/5.1.3-2.graphml",
"chars": 91716,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch05/5.2/5.2.1.js",
"chars": 996,
"preview": "var preArr = [1, 2, 3, 4, 5]\nvar postArr = [6, 7, 8, 9]\n\nfunction arrange(arr, pre, rt) {\n pre = pre || []\n rt = r"
},
{
"path": "ch05/5.2/5.2.md",
"chars": 3832,
"preview": "# 5.2 节的练习\n\n### 5.2.1\n\n图 5-7 中的依赖图的全部拓扑顺序有哪些\n\n#### 解答\n\n [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],\n [ 1, 2, 3, 5, 4, 6, 7, 8, "
},
{
"path": "ch05/5.2/assets/5.2.2-1.graphml",
"chars": 44570,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch05/5.3/5.3.md",
"chars": 3723,
"preview": "# 5.3 节的练习\n\n### 5.3.1\n\n下面是涉及运算符 + 和整数或浮点运算分量的表达式的文法。区分浮点数的方法是看它有无小数点。\n\n E -> E + T | T\n T -> num.num | num\n \n1."
},
{
"path": "ch05/5.4/5.4.md",
"chars": 3498,
"preview": "# 5.4 节的练习\n\n### 5.4.1\n\n我们在 5.4.2 节中提到可能根据语法分析栈中的 LR 状态来推导出这个状态表示了什么文法符号。我们如何推导这个信息?\n\n#### 解答\n\n见算法 4.44\n\n### 5.4.2\n\n改写下面的"
},
{
"path": "ch05/5.5/5.5.md",
"chars": 444,
"preview": "# 5.5 节的练习\n\n### 5.5.1\n\n按照 5.5.1 节的风格,将练习 5.4.4 中得到的每个 SDD 实现为递归下降的语法分析器。\n\n### 5.5.2\n\n按照 5.5.2 节的风格,将练习 5.4.4 中得到的每个 SDD "
},
{
"path": "ch06/6.1/6.1.md",
"chars": 2993,
"preview": "# 6.1 节的练习\n\n### 为下面的表达式构造 DAG\n\n ((x+y)-((x+y)*(x-y)))+((x+y)*(x-y))\n \n#### 解答\n\n 翻译成\n\n1. 抽象语法树\n2. 四元式序列\n3. 三元式序列\n4. 间接三元式序列\n\n#### 解答\n\n1. 抽象语法树\n\n "
},
{
"path": "ch06/6.7/6.7.md",
"chars": 951,
"preview": "# 6.7 节的练习\n\n### 6.7.1\n\n使用图 6-43 中的翻译方案翻译下列表达式。给出每个子表达式的 truelist 和 falselist。你可以假设第一条被生成的指令的地址是 100.\n\n1. a==b && (c==d |"
},
{
"path": "ch06/6.7/assets/6.7.1-1.graphml",
"chars": 43271,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.2/7.2.6.c",
"chars": 202,
"preview": "#include <stdio.h>\n\nint f(int x, int *py, int **ppz) {\n\t**ppz += 1;\n\t*py += 2;\n\tx += 3;\n\treturn x + *py + **ppz;\n\n}\n\nint"
},
{
"path": "ch07/7.2/7.2.md",
"chars": 4201,
"preview": "# Exercises for Section 7.2\n\n### 7.2.1\n\nSuppose that the program of Fig.7.2 uses a partition function that always picks "
},
{
"path": "ch07/7.2/assets/7.2.1-1.graphml",
"chars": 58896,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.2/assets/7.2.3-1.graphml",
"chars": 36210,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.2/assets/7.2.3-2.graphml",
"chars": 17764,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.2/assets/7.2.3-3.graphml",
"chars": 39247,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.2/assets/7.2.4.graphml",
"chars": 4379,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.3/7.3.md",
"chars": 1901,
"preview": "# Exercises for Section 7.3\n\n### 7.3.1\n\nIn Fig. 7.15 is a ML function main that computes Fibonacci numbers in a nonstand"
},
{
"path": "ch07/7.3/assets/7.3.1-activation-stack.graphml",
"chars": 19764,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.3/assets/7.3.1-activation-tree.graphml",
"chars": 30993,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.3/assets/7.3.2.graphml",
"chars": 24729,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.4/7.4.md",
"chars": 1003,
"preview": "# Exercises for Section 7.4\n\n### 7.4.1\n\nSuppose the heap consists of seven chunks, starting at address 0. The sizes of t"
},
{
"path": "ch07/7.5/7.5.md",
"chars": 1193,
"preview": "# Exercises for Section 7.5\n\n### 7.5.1\n\nWhat happens to the reference counts of the objects in Fig. 7.19 if:\n\n1. The poi"
},
{
"path": "ch07/7.5/assets/7.5.1-1.graphml",
"chars": 23454,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.5/assets/7.5.1-2.graphml",
"chars": 20390,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.5/assets/7.5.1-3.graphml",
"chars": 23105,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.5/assets/7.5.2.graphml",
"chars": 24262,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.6/7.6.md",
"chars": 4576,
"preview": "# Exercises for Section 7.6\n\n### 7.6.1\n\nShow the steps of a mark-and-sweep garbage collector on\n\n1. Fig. 7.19 with the p"
},
{
"path": "ch07/7.7/7.7.md",
"chars": 5921,
"preview": "# Exercises for Section 7.7\n\n### 7.7.1\n\nSuppose that the network of objects from Fig.7.20 is managed by an incremental a"
},
{
"path": "ch07/7.7/assets/7.7.1-1.graphml",
"chars": 25452,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch07/7.7/assets/7.7.1-2.graphml",
"chars": 24080,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch08/8.2/8.2.md",
"chars": 4355,
"preview": "# Exercises for Section 8.2\n\n### 8.2.1\n\nGenerate code for the following three-address statements assuming all variables "
},
{
"path": "ch08/8.3/8.3.md",
"chars": 1476,
"preview": "# Exercises for Section 8.3\n\n### 8.3.1\n\nGenerate code for the following three-address statements assuming stack\nallocati"
},
{
"path": "ch08/8.4/8.4.md",
"chars": 7250,
"preview": "# Exercises for Section 8.4\n\n### 8.4.1\n\nFigure 8.10 is a simple matrix-multiplication program.\n\n1. Translate the program"
},
{
"path": "ch08/8.4/assets/8.4.1-2.graphml",
"chars": 49044,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch08/8.4/assets/8.4.2-2.graphml",
"chars": 35306,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch08/8.5/8.5.md",
"chars": 3073,
"preview": "# Exercises for Section 8.5\n\n### 8.5.1\n\nConstruct the DAG for the basic block\n\n```\nd = b * c\ne = a + b\nb = b * c\na = e -"
},
{
"path": "ch08/8.5/assets/8.5.1.graphml",
"chars": 18692,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch08/8.5/assets/8.5.3.graphml",
"chars": 32798,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch08/8.5/assets/8.5.4.graphml",
"chars": 45329,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi="
},
{
"path": "ch12/12.3/12.3.md",
"chars": 856,
"preview": "# Exercises for Section 12.3\n\n### 12.3.1\n\n\n#### Answer\n1) *kill(I,D,X)* :- *defines(I,X) & defines(D,X)* \n2) *out(D,D,X"
},
{
"path": "ch12/12.7/12.7.md",
"chars": 1538,
"preview": "# Exercises for Section 12.7\n\n### 12.7.1\n\nUsing the encoding of symbols in Example 12.28, develop a BDD that represents\n"
},
{
"path": "src/lexer/Lexer.java",
"chars": 2163,
"preview": "package lexer;\n\nimport java.io.*;\nimport java.util.*;\n\npublic class Lexer {\n\tprivate int line = 1;\n\tprivate char peek = "
},
{
"path": "src/lexer/Num.java",
"chars": 134,
"preview": "package lexer;\n\npublic class Num extends Token {\n\tpublic final float value;\n\tpublic Num(float v){\n\t\tsuper(Tag.NUM);\n\t\tva"
},
{
"path": "src/lexer/Rel.java",
"chars": 149,
"preview": "package lexer;\n\npublic class Rel extends Token{\n\tpublic final String lexeme;\n\tpublic Rel(String s){\n\t\tsuper(Tag.REL);\n\t\t"
},
{
"path": "src/lexer/SyntaxException.java",
"chars": 68,
"preview": "package lexer;\n\npublic class SyntaxException extends Exception {\n\n}\n"
},
{
"path": "src/lexer/Tag.java",
"chars": 129,
"preview": "package lexer;\n\npublic class Tag {\n\tpublic final static int\n\t\tNUM = 256,\n\t\tID = 257,\n\t\tTRUE = 258,\n\t\tFALSE = 259,\n\t\tREL "
},
{
"path": "src/lexer/Token.java",
"chars": 97,
"preview": "package lexer;\n\npublic class Token{\n\tpublic final int tag;\n\tpublic Token(int t){\n\t\ttag = t;\n\t}\n}\n"
},
{
"path": "src/lexer/Word.java",
"chars": 152,
"preview": "package lexer;\n\npublic class Word extends Token{\n\tpublic final String lexeme;\n\tpublic Word(int t, String s){\n\t\tsuper(t);"
}
]
About this extraction
This page contains the full source code of the fool2fish/dragon-book-exercise-answers GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 136 files (2.1 MB), approximately 560.6k tokens, and a symbol index with 31 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.