Syntax


 

 

11 Syntax

TBoS p 492-493

The syntax of Shen is presented as a context-free grammar in BNF notation annotated where necessary to explain certain context-sensitive restrictions. For all X, the expansion >X> ::= Ɛ | ... indicates that >X> may be expanded to an empty series of expressions.

Syntax Rules for Shen Definitions

<Shen def> ::= (define <lowercase> {<types>} <rules>) | (define <lowercase> <rules>) | (defmacro <lowercase> <rules>)

<lowercase> ::= any <symbol> not beginning in uppercase

<rules> ::= <rule> | <rule> <rules>

<rule> ::= <patterns> -> <item> | <patterns> <- <item> | <patterns> -> <item> where <item> | <patterns> <- <item> where <item>

<patterns> ::= Ɛ | <pattern> <patterns>

<pattern> ::= <base> (except -> and <-) | [<pattern> <patterns> ┃ <pattern>] | [<patterns>] | (cons <pattern> <pattern>) | (@p <pattern> <pattern> <patterns>) | (@s <pattern> <pattern> <patterns>) | (@v <pattern> <pattern> <patterns>)

<item> ::= <base> | [<items> ┃ <item>] | [<items>] | <application> | <abstraction>

<items> ::= <item> | <item> <items>

<base> ::= <symbol> (except |) | <string> | <boolean> | <number> | ( ) | [ ]

<application> ::= (<items>)

<abstraction> ::= (/. <variables> <item>)

<variables> ::= <variable> | <variable> <variables>

<variable> ::= any <symbol> beginning in uppercase

<types> ::= Ɛ | (<types>) | <types> --> <types> | <symbol>

<symbol> := <alpha> <symbolchars> | <alpha> <symbolchars> := <alpha> <symbolchars> | <digit> <symbolchars> | <alpha>| <digit>

<alpha> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | . | = | - | * | / | + | _ | ? | $ | ! | @ | ~ | > | < | & | % | ' | #| ` | ; | : | { | }

<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<number> ::= <signs> <float> | <signs> <integer> | <signs> <e-number>

<signs> ::= Ɛ | + <signs> | - <signs>

<float> ::= <digits> . <digits> | . <digits>

<integer> ::= <digits>

<digits> ::= <digit> | <digit> <digits>

<e-number> ::= <integer> e - <integer> | <integer> e <integer> | <float> e - <integer> | <float> e <integer>

Syntax Rules for Shen Datatype Definitions

<datatype-definition> ::= (datatype <lowercase> <datatype-rules>)

<datatype-rules> ::= <datatype-rule> | <datatype-rule> <datatype-rules>

<datatype-rule> :: = <side-conditions> <schemes> <underline> <scheme>; | <side-conditions> <simple schemes> <double underline> <formula>;

<side-conditions> ::= Ɛ | <side-condition> | <side-condition> <side-conditions>

<side-condition> | if <item> | let <variable> <item>

<underline> ::= _ | one or more concatenations of the underscore _

<double underline> ::= = | one or more concatenations of =

<simple schemes> ::= <formula> ; | <formula> ; <simple schemes>

<formula> ::= <item> : <item> | <item>

<schemes> ::= Ɛ | <scheme> ; <schemes>

<scheme> ::= <assumptions> >> <formula> | <formula>

<assumptions> ::= <formula> | <formula>, <assumptions>

Syntax Rules for Shen Prolog Definitions

<prolog_definition> ::= (defprolog <lowercase> <clauses>)

<clauses> ::= <clause> | <clause> <clauses>

<clause> ::= <head> <-- <tail>

<head> ::= <prolog-patterns>

<prolog-patterns> ::= Ɛ | <prolog-pattern> <prolog-patterns>

<prolog-pattern> ::= <base> | [<prolog-pattern> <prolog-patterns> I <prolog-pattern>] | [<prolog-patterns>] | (cons <prolog-pattern> <prolog-pattern>)

<tail> := Ɛ | ! <tail> | <application> <tail>

1. Introduction

2. License

3. History

4. The Core Language

4.1 Base Types
4.1.1 Symbols
4.1.2 Strings
4.1.3 Numbers
4.2 Function Applications
4.3 The Top Level
4.4 Arithmetic
4.5 Comments

4.6 Sequences

4.6.1 Lists
4.6.2 Tuples
4.6.3 Vectors

4.7 lambda and let
4.8 Global Assignments
4.9 Higher Order Functions
4.10 Lazy Evaluation
4.11 I/O
4.12 Loading Files
4.13 Streams
4.14 Exceptions
4.15 Hashing
4.16 Property Lists
4.17 Eval

5 Defining Functions

5.1 Partial Functions
5.2 List Handling Functions
5.3 String Handling Functions
5.4 Tuple Handling Functions
5.5 Vector Handling Functions
5.6 Guards
5.7 Backtracking
5.8 Writing in Kλ
5.9 Macros

6. Packages

7. Shen-YACC

7.1 Recognisor Generator
7.2 Semantic Actions

8. Shen Prolog

8.1 Sample Programs

9. Types

9.1 Types and Constructors
9.2 Functions and Types
9.3 Synonyms

10 Sequent Calculus

10.1 Recursive Types

10.2 Exotic Types

10.2.1 Dependent Types
10.2.2 Negative Types
10.2.3 Subtypes
10.2.4 The Type of All Sets

11 Glossary of Functions

12 The Syntax of Shen

Built by Shen Technology (c) Mark Tarver, September 2021