Skip to content

Commit 183cd45

Browse files
committed
add pagejs related module, also update lesson 3
( ;) always one - two lessons behind, sorry )
1 parent f83f319 commit 183cd45

File tree

14 files changed

+7522
-0
lines changed

14 files changed

+7522
-0
lines changed

nathansununiversity_03.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// http://nathansuniversity.com/pegs.html
2+
// http://pegjs.majda.cz/
3+
4+
// page 1
5+
start =
6+
char
7+
8+
char =
9+
[A-Z]
10+
11+
// page 2
12+
start =
13+
countrycode
14+
15+
lowercase =
16+
[a-z]
17+
18+
countrycode =
19+
first:lowercase second:lowercase
20+
{ return "" + first + second ;}
21+
22+
// page 3
23+
start =
24+
word
25+
26+
word =
27+
allLower
28+
/ allUpper
29+
30+
allLower =
31+
all:[a-z]+
32+
{ return all.join("");}
33+
34+
allUpper =
35+
all:[A-Z]+
36+
{ return all.join("");}
37+
38+
// page 3
39+
start =
40+
wordlist
41+
42+
wordlist =
43+
nword:word sword:spaceword*
44+
{ if (sword && sword.length) {
45+
sword.unshift(nword)
46+
return sword;
47+
} else {
48+
return [nword];
49+
}
50+
}
51+
52+
word =
53+
nword:[a-z]+
54+
{ return nword.join(""); }
55+
56+
space =
57+
" "
58+
59+
spaceword =
60+
space nword:word
61+
{ return nword; }
62+
63+
/* test code for page 3 */
64+
var parse = wrapExceptions(PEG.buildParser(answer).parse);
65+
66+
assert_eq(parse(""), undefined,
67+
"don't parse empty string");
68+
assert_eq(parse("dog"), ["dog"],
69+
"parse dog");
70+
assert_eq(parse("black dog"), ["black", "dog"],
71+
"parse black dog");
72+
assert_eq(parse("angry black dog"), ["angry", "black", "dog"],
73+
"parse angry black dog");
74+
assert_eq(parse("Gray dog"), undefined,
75+
"don't parse Gray dog");
76+
77+
// page 4

node_modules/.bin/pegjs

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/pegjs/CHANGELOG

Lines changed: 201 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/pegjs/LICENSE

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)