File: syntax.bnf

package info (click to toggle)
storm-lang 0.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,004 kB
  • sloc: ansic: 261,462; cpp: 140,405; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (35 lines) | stat: -rw-r--r-- 1,313 bytes parent folder | download | duplicates (2)
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
use core.lang;
use lang.bs;

// Borrow the low-level syntax from Basic Storm.
optional delimiter = SDelimiter;
required delimiter = SRequiredDelimiter;

// Backend-agnostic version of the syntax. There might be more specialized variants for use
// with specific backends for additional convenience.
lang.bs.SAtom => block(l) : "layout" #keyword ~ SLayoutRoot(block) l;

LayoutRoot SLayoutRoot(Block block);
SLayoutRoot => createRoot(block) : SLayout(me) -> add;

// Define an instance of a Layout object with associated properties.
LayoutBlock SLayout(LayoutRoot block);
SLayout => LayoutBlock(block, name, params) : SType name, ("(", SParamList(block.block) params, ")",)? "{" [, SLayoutContent(me),]+ "}";

// Contents of a Layout object.
void SLayoutContent(LayoutBlock block);
SLayoutContent : (SLayoutItem(block),)*;

// One property or a nested layout object.
void SLayoutItem(LayoutBlock block);

// A property, either in this layout or its parent.
SLayoutItem => add(block, name, params) : SName name #varName - (":", SParamList(block.block) params)?, ";";

// A nested layout item.
SLayoutItem => add(block, l) : SLayout(block) l;

// Parameter list.
Actuals SParamList(Block root);
SParamList => Actuals() : ;
SParamList => Actuals() : lang.bs.SExpr(root) -> add - (, ",", lang.bs.SExpr(root) -> add)*;