pec-0.1: Language/Pec/Doc.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META NAME="generator" CONTENT="http://txt2tags.org">
<TITLE>The Language Pec</TITLE>
</HEAD><BODY BGCOLOR="white" TEXT="black">
<CENTER>
<H1>The Language Pec</H1>
<FONT SIZE="4"><I>BNF Converter</I></FONT><BR>
</CENTER>
<P>
This document was automatically generated by the <I>BNF-Converter</I>. It was generated together with the lexer, the parser, and the abstract syntax module, which guarantees that the document matches with the implementation of the language (provided no hand-hacking has taken place).
</P>
<H2>The lexical structure of Pec</H2>
<H3>Literals</H3>
<P>
String literals <I>String</I> have the form
<CODE>"</CODE><I>x</I><CODE>"</CODE>, where <I>x</I> is any sequence of any characters
except <CODE>"</CODE> unless preceded by <CODE>\</CODE>.
</P>
<P>
Character literals <I>Char</I> have the form
<CODE>'</CODE><I>c</I><CODE>'</CODE>, where <I>c</I> is any single character.
</P>
<P>
Frac literals are recognized by the regular expression
<CODE>`</CODE>'-'? digit+ '.' digit+ ('e' '-'? digit+)?<CODE>`</CODE>
</P>
<P>
Uident literals are recognized by the regular expression
<CODE>`</CODE>upper (letter | digit | '_')*<CODE>`</CODE>
</P>
<P>
Lident literals are recognized by the regular expression
<CODE>`</CODE>(lower | '_') (letter | digit | '_')*<CODE>`</CODE>
</P>
<P>
USym literals are recognized by the regular expression
<CODE>`</CODE>('!' | '#' | '$' | '%' | '&' | '*' | '+' | '-' | '.' | '/' | ':' | '<' | '=' | '>' | '?' | '@' | '\' | '^' | '|' | '~')+<CODE>`</CODE>
</P>
<P>
Number literals are recognized by the regular expression
<CODE>`</CODE>'-'? digit+<CODE>`</CODE>
</P>
<P>
Count literals are recognized by the regular expression
<CODE>`</CODE>'#' digit+<CODE>`</CODE>
</P>
<H3>Reserved words and symbols</H3>
<P>
The set of reserved words is the set of terminals appearing in the grammar. Those reserved words that consist of non-letter characters are called symbols, and they are treated in a different way from those that are similar to identifiers. The lexer follows rules familiar from languages like Haskell, C, and Java, including longest match and spacing conventions.
</P>
<P>
The reserved words used in Pec are the following:
</P>
<TABLE ALIGN="center" CELLPADDING="4">
<TR>
<TD><CODE>Array</CODE></TD>
<TD><CODE>all</CODE></TD>
<TD><CODE>as</CODE></TD>
<TD><CODE>branch</CODE></TD>
</TR>
<TR>
<TD><CODE>case</CODE></TD>
<TD><CODE>do</CODE></TD>
<TD><CODE>exports</CODE></TD>
<TD><CODE>extern</CODE></TD>
</TR>
<TR>
<TD><CODE>import</CODE></TD>
<TD><CODE>in</CODE></TD>
<TD><CODE>let</CODE></TD>
<TD><CODE>module</CODE></TD>
</TR>
<TR>
<TD><CODE>of</CODE></TD>
<TD><CODE>type</CODE></TD>
<TD><CODE>where</CODE></TD>
</TR>
</TABLE>
<P>
The symbols used in Pec are the following:
</P>
<TABLE ALIGN="center" CELLPADDING="4">
<TR>
<TD>{</TD>
<TD>}</TD>
<TD>(</TD>
<TD>)</TD>
</TR>
<TR>
<TD>.</TD>
<TD>..</TD>
<TD>::</TD>
<TD>=</TD>
</TR>
<TR>
<TD><-</TD>
<TD>[</TD>
<TD>]</TD>
<TD>@</TD>
</TR>
<TR>
<TD>-></TD>
<TD>|</TD>
<TD>#</TD>
<TD>,</TD>
</TR>
<TR>
<TD>;</TD>
<TD></TD>
<TD></TD>
</TR>
</TABLE>
<H3>Comments</H3>
<P>
Single-line comments begin with //.Multiple-line comments are enclosed with /* and */.
</P>
<H2>The syntactic structure of Pec</H2>
<P>
Non-terminals are enclosed between < and >.
The symbols -> (production), <B>|</B> (union)
and <B>eps</B> (empty rule) belong to the BNF notation.
All other symbols are terminals.
</P>
<TABLE ALIGN="center" CELLPADDING="4">
<TR>
<TD><I>Module</I></TD>
<TD>-></TD>
<TD><CODE>module</CODE> <I>Modid</I> <CODE>exports</CODE> <I>ExportDecl</I> <CODE>where</CODE> <CODE>{</CODE> <I>[TopDecl]</I> <CODE>}</CODE></TD>
</TR>
<TR>
<TD><I>ExportDecl</I></TD>
<TD>-></TD>
<TD><CODE>all</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>(</CODE> <I>[Export]</I> <CODE>)</CODE></TD>
</TR>
<TR>
<TD><I>Export</I></TD>
<TD>-></TD>
<TD><I>Con</I> <I>Spec</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Var</I></TD>
</TR>
<TR>
<TD><I>Spec</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>(</CODE> <CODE>.</CODE> <CODE>)</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>(</CODE> <CODE>..</CODE> <CODE>)</CODE></TD>
</TR>
<TR>
<TD><I>TopDecl</I></TD>
<TD>-></TD>
<TD><CODE>import</CODE> <I>Modid</I> <I>AsSpec</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>extern</CODE> <I>ExtNm</I> <I>Var</I> <CODE>::</CODE> <I>Type</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>type</CODE> <I>Con</I> <I>[TyVar]</I> <CODE>=</CODE> <I>TyDecl</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Var</I> <CODE>::</CODE> <I>Type</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Var</I> <CODE>=</CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Var</I> <I>[Exp0]</I> <CODE>=</CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD><I>AsSpec</I></TD>
<TD>-></TD>
<TD><CODE>as</CODE> <I>Con</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD><I>ExtNm</I></TD>
<TD>-></TD>
<TD><I>String</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD><I>Exp</I></TD>
<TD>-></TD>
<TD><CODE>do</CODE> <CODE>{</CODE> <I>[Exp5]</I> <CODE>}</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp5</I></TD>
</TR>
<TR>
<TD><I>Exp5</I></TD>
<TD>-></TD>
<TD><I>Exp4</I> <CODE>=</CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>let</CODE> <I>Exp4</I> <CODE>=</CODE> <I>Exp</I> <CODE>in</CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp4</I> <CODE><-</CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>case</CODE> <I>Exp</I> <CODE>of</CODE> <CODE>{</CODE> <I>[CaseAlt]</I> <CODE>}</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>branch</CODE> <CODE>of</CODE> <CODE>{</CODE> <I>[BranchAlt]</I> <CODE>}</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp4</I></TD>
</TR>
<TR>
<TD><I>Exp4</I></TD>
<TD>-></TD>
<TD><I>Exp3</I> <I>USym</I> <I>Exp3</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp3</I></TD>
</TR>
<TR>
<TD><I>Exp3</I></TD>
<TD>-></TD>
<TD><I>Exp3</I> <I>Exp2</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp2</I></TD>
</TR>
<TR>
<TD><I>Exp2</I></TD>
<TD>-></TD>
<TD><I>UnOp</I> <I>Exp1</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp1</I></TD>
</TR>
<TR>
<TD><I>Exp1</I></TD>
<TD>-></TD>
<TD><I>Exp1</I> <CODE>[</CODE> <I>Exp</I> <CODE>]</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp1</I> <CODE>.</CODE> <I>Field</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp0</I></TD>
</TR>
<TR>
<TD><I>Exp0</I></TD>
<TD>-></TD>
<TD><CODE>Array</CODE> <CODE>[</CODE> <I>[Exp]</I> <CODE>]</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>{</CODE> <I>[FieldD]</I> <CODE>}</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>(</CODE> <I>[Exp]</I> <CODE>)</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>(</CODE> <I>Exp</I> <CODE>::</CODE> <I>Type</I> <CODE>)</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Count</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Var</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Lit</I></TD>
</TR>
<TR>
<TD><I>UnOp</I></TD>
<TD>-></TD>
<TD><CODE>@</CODE></TD>
</TR>
<TR>
<TD><I>CaseAlt</I></TD>
<TD>-></TD>
<TD><I>CasePat</I> <CODE>-></CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD><I>CasePat</I></TD>
<TD>-></TD>
<TD><I>Con</I> <I>Var</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Lit</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Var</I></TD>
</TR>
<TR>
<TD><I>BranchAlt</I></TD>
<TD>-></TD>
<TD><CODE>|</CODE> <I>BranchPat</I> <CODE>-></CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD><I>BranchPat</I></TD>
<TD>-></TD>
<TD><I>Exp4</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD><I>Type</I></TD>
<TD>-></TD>
<TD><I>Type2</I> <CODE>-></CODE> <I>Type</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Type2</I></TD>
</TR>
<TR>
<TD><I>Type2</I></TD>
<TD>-></TD>
<TD><CODE>Array</CODE> <I>Type1</I> <I>Type1</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Con</I> <I>[Type1]</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Type1</I></TD>
</TR>
<TR>
<TD><I>Type1</I></TD>
<TD>-></TD>
<TD><I>Type0</I></TD>
</TR>
<TR>
<TD><I>Type0</I></TD>
<TD>-></TD>
<TD><CODE>(</CODE> <I>[Type]</I> <CODE>)</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Count</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>TyVar</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Con</I></TD>
</TR>
<TR>
<TD><I>TyDecl</I></TD>
<TD>-></TD>
<TD><CODE>{</CODE> <I>[FieldT]</I> <CODE>}</CODE></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>|</CODE> <I>[ConC]</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Type</I></TD>
</TR>
<TR>
<TD><I>ConC</I></TD>
<TD>-></TD>
<TD><I>Con</I> <I>[Type0]</I></TD>
</TR>
<TR>
<TD><I>FieldT</I></TD>
<TD>-></TD>
<TD><I>Field</I> <CODE>::</CODE> <I>Type</I></TD>
</TR>
<TR>
<TD><I>Lit</I></TD>
<TD>-></TD>
<TD><I>Char</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>String</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Number</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Frac</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Con</I></TD>
</TR>
<TR>
<TD><I>FieldD</I></TD>
<TD>-></TD>
<TD><I>Field</I> <CODE>=</CODE> <I>Exp</I></TD>
</TR>
<TR>
<TD><I>Var</I></TD>
<TD>-></TD>
<TD><I>Lident</I></TD>
</TR>
<TR>
<TD><I>Con</I></TD>
<TD>-></TD>
<TD><I>Uident</I></TD>
</TR>
<TR>
<TD><I>Modid</I></TD>
<TD>-></TD>
<TD><I>Uident</I></TD>
</TR>
<TR>
<TD><I>Field</I></TD>
<TD>-></TD>
<TD><I>Lident</I></TD>
</TR>
<TR>
<TD><I>TyVar</I></TD>
<TD>-></TD>
<TD><I>Lident</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><CODE>#</CODE> <I>Lident</I></TD>
</TR>
<TR>
<TD><I>[Exp]</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp</I> <CODE>,</CODE> <I>[Exp]</I></TD>
</TR>
<TR>
<TD><I>[FieldT]</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>FieldT</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>FieldT</I> <CODE>,</CODE> <I>[FieldT]</I></TD>
</TR>
<TR>
<TD><I>[TyVar]</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>TyVar</I> <I>[TyVar]</I></TD>
</TR>
<TR>
<TD><I>[Type]</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Type</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Type</I> <CODE>,</CODE> <I>[Type]</I></TD>
</TR>
<TR>
<TD><I>[Export]</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Export</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Export</I> <CODE>,</CODE> <I>[Export]</I></TD>
</TR>
<TR>
<TD><I>[Type0]</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Type0</I> <I>[Type0]</I></TD>
</TR>
<TR>
<TD><I>[ConC]</I></TD>
<TD>-></TD>
<TD><I>ConC</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>ConC</I> <CODE>|</CODE> <I>[ConC]</I></TD>
</TR>
<TR>
<TD><I>[Exp0]</I></TD>
<TD>-></TD>
<TD><I>Exp0</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp0</I> <I>[Exp0]</I></TD>
</TR>
<TR>
<TD><I>[FieldD]</I></TD>
<TD>-></TD>
<TD><I>FieldD</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>FieldD</I> <CODE>,</CODE> <I>[FieldD]</I></TD>
</TR>
<TR>
<TD><I>[Type1]</I></TD>
<TD>-></TD>
<TD><I>Type1</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Type1</I> <I>[Type1]</I></TD>
</TR>
<TR>
<TD><I>[TopDecl]</I></TD>
<TD>-></TD>
<TD><B>eps</B></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>TopDecl</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>TopDecl</I> <CODE>;</CODE> <I>[TopDecl]</I></TD>
</TR>
<TR>
<TD><I>[CaseAlt]</I></TD>
<TD>-></TD>
<TD><I>CaseAlt</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>CaseAlt</I> <CODE>;</CODE> <I>[CaseAlt]</I></TD>
</TR>
<TR>
<TD><I>[BranchAlt]</I></TD>
<TD>-></TD>
<TD><I>BranchAlt</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>BranchAlt</I> <CODE>;</CODE> <I>[BranchAlt]</I></TD>
</TR>
<TR>
<TD><I>[Exp5]</I></TD>
<TD>-></TD>
<TD><I>Exp5</I></TD>
</TR>
<TR>
<TD></TD>
<TD ALIGN="center"><B>|</B></TD>
<TD><I>Exp5</I> <CODE>;</CODE> <I>[Exp5]</I></TD>
</TR>
</TABLE>
<!-- html code generated by txt2tags 2.6 (http://txt2tags.org) -->
<!-- cmdline: txt2tags -t html Doc.txt -->
</BODY></HTML>