diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-10-12 22:01:06 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-10-12 22:05:53 -0400 |
| commit | e416644a9b0837425d016f64ff04100c25dc813e (patch) | |
| tree | fafe629f653f247206042c511b21492094855e28 /docs/spec/grammar.html | |
| parent | cebb1bcfcec64f8d0dc888466b1c99b7069d258c (diff) | |
Rename NS_STMT to IMPORT
Diffstat (limited to 'docs/spec/grammar.html')
| -rw-r--r-- | docs/spec/grammar.html | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/docs/spec/grammar.html b/docs/spec/grammar.html index a36e02bb..df9308df 100644 --- a/docs/spec/grammar.html +++ b/docs/spec/grammar.html @@ -7,10 +7,10 @@ <h1 id="specification-bqn-grammar">Specification: BQN grammar</h1> <p>BQN's grammar is given below. Terms are defined in a <a href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form">BNF</a> variant. However, handling special names properly is possible but difficult in BNF, so they are explained in text along with the braced block grammar.</p> <p>The symbols <code><span class='Value'>s</span></code>, <code><span class='Function'>F</span></code>, <code><span class='Modifier'>_m</span></code>, and <code><span class='Modifier2'>_c_</span></code> are identifier tokens with subject, function, 1-modifier, and 2-modifier classes respectively. Similarly, <code><span class='Value'>sl</span></code>, <code><span class='Function'>Fl</span></code>, <code><span class='Modifier'>_ml</span></code>, and <code><span class='Modifier2'>_cl_</span></code> refer to literals and primitives of those classes. While names in the BNF here follow the identifier naming scheme, this is informative only: syntactic classes are no longer used after parsing and cannot be inspected in a running program.</p> -<p>A program is a list of statements. Almost all statements are expressions. Valueless results stemming from <code><span class='Nothing'>ยท</span></code>, or <code><span class='Value'>๐จ</span></code> in a monadic brace function, can be used as statements but not expressions. "Namespace statements", which import multiple values from a namespace block (immediate block containing <code><span class='Gets'>โ</span></code>), also cannot be expressions. An extension to BQN to allow first-class namespaces would extend ordinary expressions so that <code><span class='Function'>NS_STMT</span></code> would no longer be needed, as it would be a subset of <code><span class='Function'>EXPR</span></code>.</p> +<p>A program is a list of statements. Almost all statements are expressions. Valueless results stemming from <code><span class='Nothing'>ยท</span></code>, or <code><span class='Value'>๐จ</span></code> in a monadic brace function, can be used as statements but not expressions. "Namespace statements", which import multiple values from a namespace block (immediate block containing <code><span class='Gets'>โ</span></code>), also cannot be expressions. An extension to BQN to allow first-class namespaces would extend ordinary expressions so that <code><span class='Function'>IMPORT</span></code> would no longer be needed, as it would be a subset of <code><span class='Function'>EXPR</span></code>.</p> <pre><span class='Function'>PROGRAM</span> <span class='Function'>=</span> <span class='Separator'>โ</span><span class='Value'>?</span> <span class='Paren'>(</span> <span class='Paren'>(</span> <span class='Function'>STMT</span> <span class='Separator'>โ</span> <span class='Paren'>)</span><span class='Value'>*</span> <span class='Function'>STMT</span> <span class='Separator'>โ</span><span class='Value'>?</span> <span class='Paren'>)</span><span class='Value'>?</span> <span class='Function'>STMT</span> <span class='Function'>=</span> <span class='Function'>BSTMT</span> <span class='Function'>|</span> <span class='Function'>EXPORT</span> -<span class='Function'>BSTMT</span> <span class='Function'>=</span> <span class='Function'>EXPR</span> <span class='Function'>|</span> <span class='Value'>nothing</span> <span class='Function'>|</span> <span class='Function'>NS_STMT</span> +<span class='Function'>BSTMT</span> <span class='Function'>=</span> <span class='Function'>EXPR</span> <span class='Function'>|</span> <span class='Value'>nothing</span> <span class='Function'>|</span> <span class='Function'>IMPORT</span> <span class='Separator'>โ</span> <span class='Function'>=</span> <span class='Paren'>(</span> <span class='String'>"โ"</span> <span class='Function'>|</span> <span class='String'>","</span> <span class='Function'>|</span> <span class='Value'>\n</span> <span class='Paren'>)</span><span class='Function'>+</span> <span class='Function'>EXPR</span> <span class='Function'>=</span> <span class='Value'>subExpr</span> <span class='Function'>|</span> <span class='Function'>FuncExpr</span> <span class='Function'>|</span> <span class='Modifier'>_m1Expr</span> <span class='Function'>|</span> <span class='Modifier2'>_m2Expr_</span> </pre> @@ -89,7 +89,7 @@ <span class='Modifier2'>_brMod2_</span> <span class='Function'>=</span> <span class='String'>"{"</span> <span class='Paren'>(</span> <span class='Modifier2'>_cCase_</span> <span class='String'>";"</span> <span class='Paren'>)</span><span class='Value'>*</span> <span class='Paren'>(</span> <span class='Modifier2'>_cCase_</span> <span class='Function'>|</span> <span class='Modifier2'>_cMan_</span> <span class='Paren'>(</span> <span class='String'>";"</span> <span class='Modifier2'>_cMan_</span> <span class='Paren'>)</span><span class='Value'>?</span> <span class='Paren'>)</span> <span class='String'>"}"</span> </pre> <p>A namespace block is very similar in grammar to an ordinary immediate block, but allows export declarations with <code><span class='Gets'>โ</span></code>, either in place of the ordinary definition <code><span class='Gets'>โ</span></code> or in the special <code><span class='Function'>EXPORT</span></code> statement. The arrow <code><span class='Gets'>โ</span></code> can also be placed in the header to mark a namespace block. Since the block returns all exported values and not the result of the last line, the last line does not need to be an expression.</p> -<pre><span class='Function'>NS_STMT</span> <span class='Function'>=</span> <span class='Value'>nsLHS</span> <span class='Function'>ASGN</span> <span class='Value'>brNS</span> +<pre><span class='Function'>IMPORT</span> <span class='Function'>=</span> <span class='Value'>nsLHS</span> <span class='Function'>ASGN</span> <span class='Value'>brNS</span> <span class='Function'>NS_VAR</span> <span class='Function'>=</span> <span class='Paren'>(</span> <span class='Value'>lhs</span> <span class='String'>"โ"</span> <span class='Paren'>)</span><span class='Value'>?</span> <span class='Function'>LHS_NAME</span> <span class='Value'>nsLHS</span> <span class='Function'>=</span> <span class='Function'>LHS_NAME</span> <span class='Paren'>(</span> <span class='String'>"โฟ"</span> <span class='Function'>LHS_NAME</span> <span class='Paren'>)</span><span class='Function'>+</span> <span class='Function'>|</span> <span class='String'>"โจ"</span> <span class='Separator'>โ</span><span class='Value'>?</span> <span class='Paren'>(</span> <span class='Paren'>(</span> <span class='Function'>NS_VAR</span> <span class='Separator'>โ</span> <span class='Paren'>)</span><span class='Value'>*</span> <span class='Function'>NS_VAR</span> <span class='Separator'>โ</span><span class='Value'>?</span> <span class='Paren'>)</span><span class='Value'>?</span> <span class='String'>"โฉ"</span> |
