-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwriting.pest
57 lines (42 loc) · 1.3 KB
/
writing.pest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
start = _{ SOI ~ declaration* ~ EOI}
declaration = {
doc_code_decl
| code_section_decl
| code_dep_decl
| code_func_decl
}
doc_code_decl = {
"doc-code" ~ ":" ~ "file" ~ "(" ~ string_literal ~ ")" ~ "." ~ "line" ~ "(" ~ ")" ~ "[" ~ start_line? ~ "," ~ end_line? ~ "]"
}
code_section_decl = {
"doc-section" ~ ":" ~ "file" ~ "(" ~ string_literal ~ ")" ~ "." ~ "section" ~ "(" ~ section_name ~ ")"
}
// todo: add polymorphism for java??
code_func_decl = {
"doc-func" ~ ":" ~ "file" ~ "(" ~ string_literal ~ ")" ~ "." ~ "func" ~ "(" ~ ")" ~ "[" ~ func_name ~ ("," ~ func_name)* ~ "]"
}
func_name = {
string_literal
}
section_name = {
string_literal
}
code_dep_decl = {
"code-dep" ~ ":" ~ (group_id ~ ":")? ~ artifact_id ~ ";" ~ "version" ~ "=" ~ version
}
group_id = { identifier }
artifact_id = { identifier }
start_line = { digits }
end_line = { digits }
string_literal = @{
double_quoted_string |
single_quoted_string
}
digit = { '0'..'9' }
digits = { digit+ }
version = @{ digit ~ ("." ~ digit)* }
identifier = @{ (ASCII_ALPHA | ASCII_ALPHANUMERIC | "_") ~ (ASCII_ALPHANUMERIC | "_")* }
double_quoted_string = @{ "\"" ~ (!("\"") ~ ANY)* ~ "\""}
single_quoted_string = @{ "\'" ~ (!("\'") ~ ANY)* ~ "\'"}
newline = _{ "\n" | "\r\n" }
WHITESPACE = _{ " " | "\t" | NEWLINE }