diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/.traces/jump_backward | 11 | ||||
-rw-r--r-- | cpp/.traces/parse_comment_after_instruction | 3 | ||||
-rw-r--r-- | cpp/.traces/parse_comment_amongst_instruction | 3 | ||||
-rw-r--r-- | cpp/.traces/parse_comment_amongst_instruction2 | 3 | ||||
-rw-r--r-- | cpp/.traces/parse_comment_amongst_instruction3 | 6 | ||||
-rw-r--r-- | cpp/.traces/parse_comment_outside_recipe | 3 | ||||
-rw-r--r-- | cpp/011load | 58 | ||||
-rw-r--r-- | cpp/015jump | 9 |
8 files changed, 81 insertions, 15 deletions
diff --git a/cpp/.traces/jump_backward b/cpp/.traces/jump_backward index 6d9e433f..48164312 100644 --- a/cpp/.traces/jump_backward +++ b/cpp/.traces/jump_backward @@ -1,20 +1,9 @@ parse/0: instruction: 10 parse/0: ingredient: {name: "1", type: 0} -parse/0: ingredient: {name: "//", type: } -parse/0: ingredient: {name: "0", type: } -parse/0: ingredient: {name: "-+", type: } parse/0: instruction: 10 parse/0: ingredient: {name: "1", type: 0} -parse/0: ingredient: {name: "//", type: } -parse/0: ingredient: {name: "|", type: } -parse/0: ingredient: {name: "1", type: } -parse/0: ingredient: {name: "+-+", type: } parse/0: instruction: 10 parse/0: ingredient: {name: "-2", type: 0} -parse/0: ingredient: {name: "//", type: } -parse/0: ingredient: {name: "2", type: } -parse/0: ingredient: {name: "+-->+", type: } -parse/0: ingredient: {name: "|", type: } run/0: instruction main/0 run/0: ingredient 0 is 1 run/0: instruction main/2 diff --git a/cpp/.traces/parse_comment_after_instruction b/cpp/.traces/parse_comment_after_instruction new file mode 100644 index 00000000..d20319d2 --- /dev/null +++ b/cpp/.traces/parse_comment_after_instruction @@ -0,0 +1,3 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "23", type: 0} +parse/0: product: {name: "1", type: 1} diff --git a/cpp/.traces/parse_comment_amongst_instruction b/cpp/.traces/parse_comment_amongst_instruction new file mode 100644 index 00000000..d20319d2 --- /dev/null +++ b/cpp/.traces/parse_comment_amongst_instruction @@ -0,0 +1,3 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "23", type: 0} +parse/0: product: {name: "1", type: 1} diff --git a/cpp/.traces/parse_comment_amongst_instruction2 b/cpp/.traces/parse_comment_amongst_instruction2 new file mode 100644 index 00000000..d20319d2 --- /dev/null +++ b/cpp/.traces/parse_comment_amongst_instruction2 @@ -0,0 +1,3 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "23", type: 0} +parse/0: product: {name: "1", type: 1} diff --git a/cpp/.traces/parse_comment_amongst_instruction3 b/cpp/.traces/parse_comment_amongst_instruction3 new file mode 100644 index 00000000..7b755615 --- /dev/null +++ b/cpp/.traces/parse_comment_amongst_instruction3 @@ -0,0 +1,6 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "23", type: 0} +parse/0: product: {name: "1", type: 1} +parse/0: instruction: 1 +parse/0: ingredient: {name: "23", type: 0} +parse/0: product: {name: "2", type: 1} diff --git a/cpp/.traces/parse_comment_outside_recipe b/cpp/.traces/parse_comment_outside_recipe new file mode 100644 index 00000000..d20319d2 --- /dev/null +++ b/cpp/.traces/parse_comment_outside_recipe @@ -0,0 +1,3 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "23", type: 0} +parse/0: product: {name: "1", type: 1} diff --git a/cpp/011load b/cpp/011load index 9806bfd0..d01c72d2 100644 --- a/cpp/011load +++ b/cpp/011load @@ -109,6 +109,8 @@ string next_word(istream& in) { ostringstream out; skip_whitespace(in); slurp_word(in, out); + skip_whitespace(in); + skip_comment(in); return out.str(); } @@ -144,12 +146,68 @@ void skip_comments_and_newlines(istream& in) { } } +void skip_comment(istream& in) { + if (in.peek() == '#') { + in.get(); + while (in.peek() != '\n') in.get(); + } +} + void skip_comma(istream& in) { skip_whitespace(in); if (in.peek() == ',') in.get(); skip_whitespace(in); } +:(scenario parse_comment_outside_recipe) +# comment +recipe main [ + 1:integer <- copy 23:literal +] ++parse: instruction: 1 ++parse: ingredient: {name: "23", type: 0} ++parse: product: {name: "1", type: 1} + +:(scenario parse_comment_amongst_instruction) +recipe main [ + # comment + 1:integer <- copy 23:literal +] ++parse: instruction: 1 ++parse: ingredient: {name: "23", type: 0} ++parse: product: {name: "1", type: 1} + +:(scenario parse_comment_amongst_instruction2) +recipe main [ + # comment + 1:integer <- copy 23:literal + # comment +] ++parse: instruction: 1 ++parse: ingredient: {name: "23", type: 0} ++parse: product: {name: "1", type: 1} + +:(scenario parse_comment_amongst_instruction3) +recipe main [ + 1:integer <- copy 23:literal + # comment + 2:integer <- copy 23:literal +] ++parse: instruction: 1 ++parse: ingredient: {name: "23", type: 0} ++parse: product: {name: "1", type: 1} ++parse: instruction: 1 ++parse: ingredient: {name: "23", type: 0} ++parse: product: {name: "2", type: 1} + +:(scenario parse_comment_after_instruction) +recipe main [ + 1:integer <- copy 23:literal # comment +] ++parse: instruction: 1 ++parse: ingredient: {name: "23", type: 0} ++parse: product: {name: "1", type: 1} + :(scenario parse_label) recipe main [ +foo diff --git a/cpp/015jump b/cpp/015jump index 5b4a9624..2ce18859 100644 --- a/cpp/015jump +++ b/cpp/015jump @@ -24,10 +24,11 @@ recipe main [ :(scenario "jump_backward") recipe main [ - jump 1:offset // 0 -+ - jump 1:offset // | 1 +-+ - jump -2:offset // 2 +-->+ | -] // 3 \/ + jump 1:offset # 0 -+ + jump 1:offset # | +-+ 1 + # \/ /\ | + jump -2:offset # 2 +-->+ | +] # \/ 3 +run: instruction main/0 +run: instruction main/2 +run: instruction main/1 |