12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- start
- = ws head:segment tail:segmentTail* { tail.unshift(head); return tail; }
- segmentTail
- = ws ',' ws seg:segment { return seg; }
- segment
- = str:string { return {string: str}; }
- / v:identifier size:size ? specs:specifierList ?
- { return {name: v, size: size, specifiers: specs}; }
- / v:number size:size ? specs:specifierList ?
- { return {value: v, size: size, specifiers: specs}; }
- string
- = '"' '"' { return ""; }
- / '"' chars:chars '"' { return chars; }
- /* From JSON example
- https://github.com/dmajda/pegjs/blob/master/examples/json.pegjs */
- chars
- = chars:char+ { return chars.join(""); }
- char
- = [^"\\\0-\x1F\x7f]
- / '\\"' { return '"'; }
- / "\\\\" { return "\\"; }
- / "\\/" { return "/"; }
- / "\\b" { return "\b"; }
- / "\\f" { return "\f"; }
- / "\\n" { return "\n"; }
- / "\\r" { return "\r"; }
- / "\\t" { return "\t"; }
- / "\\u" h1:hexDigit h2:hexDigit h3:hexDigit h4:hexDigit {
- return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4));
- }
- hexDigit
- = [0-9a-fA-F]
- identifier
- = (head:[_a-zA-Z] tail:[_a-zA-Z0-9]*) { return head + tail.join(''); }
- number
- = '0' { return 0; }
- / head:[1-9] tail:[0-9]* { return parseInt(head + tail.join('')); }
- size
- = ':' num:number { return num; }
- / ':' id:identifier { return id; }
- specifierList
- = '/' head:specifier tail:specifierTail* { tail.unshift(head); return tail; }
- specifierTail
- = '-' spec:specifier { return spec; }
- specifier
- = 'little' / 'big' / 'signed' / 'unsigned'
- / 'integer' / 'binary' / 'float'
- / unit
- unit
- = 'unit:' num:number { return 'unit:' + num; }
- ws = [ \t\n]*
|