/
idl.peg
41 lines (38 loc) · 1.59 KB
/
idl.peg
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
Idl:
Sentence < (Comment / Include / Module)*
Module < "module" Name "{" (Module / Struct / Constant / Typedef / Empty)* "};"
Struct < Annotation* "struct" Name "{" GeneralMember* "};"
GeneralMember < (ArrayMember / Member) ';'
Member < Annotation* Type Field
ArrayMember < Annotation* ArrayType Field
Include < "#include" FileName
AnnoContent < Type '=' (Text / Number)
Annotation < AnnoType '(' AnnoContent? (',' AnnoContent)* ')'
Constant < Annotation* "const" Type Field "=" AnyLiteral ";"
Typedef < Annotation* "typedef" Type ArrayField ";"
Name <- identifier
Type <- (identifier "::" identifier "::")? identifier
ArrayType <- "sequence" '<' Type '>'
Field <- identifier
ArrayField <- Field '[' Unsigned ']'
Empty <- eps
FileName <- StringLiteral
Text < StringLiteral StringLiteral*
AnnoType <- '@' identifier
AnyLiteral < (Text / Number)
Comment <~ "//" (!endOfLine .)* endOfLine
StringLiteral <~ doublequote (DQChar)* doublequote
DQChar <- EscapeSequence
/ !doublequote .
EscapeSequence <~ backslash ( quote
/ doublequote
/ backslash
/ [abfnrtv]
)
Scientific <~ Floating ( ('e' / 'E' ) Integer )?
Floating <~ Integer ('.' Unsigned )?
Unsigned <~ [0-9]+
Integer <~ Sign? Unsigned
Binary <~ "0b" [01] [01_]*
Sign <- '-' / '+'
Number <- (Binary / Scientific)