The Pico Concrete Grammar

(contents of the file ConcrSyn.pco)
<program>       ::= <expression>
<expression>    ::= <invocation>
<expression>    ::= <invocation> :  <expression>
<expression>    ::= <invocation> := <expression>

<invocation>    ::= <comparand>
<invocation>    ::= <invocation> <comparator> <comparand>
<comparand>     ::= <term>
<comparand>     ::= <comparand> <adder> <term>
<term>          ::= <factor>
<term>          ::= <term> <multiplier> <factor>
<factor>        ::= <reference>
<factor>        ::= <factor> <power> <reference>

<reference>     ::= <number>
<reference>     ::= <fraction>
<reference>     ::= <text>
<reference>     ::= <variable>
<reference>     ::= <prefix> 
<reference>     ::= <application>
<reference>     ::= <apply>
<reference>     ::= <tabulation>
<reference>     ::= <subexpression>
<reference>     ::= <sequence>
<reference>     ::= <table>

<prefix>        ::= <operator> <reference>
<application>   ::= <variable> ( )
<application>   ::= <variable> ( <commalist> )
<apply>         ::= <variable> @ <invocation>
<tabulation>    ::= <name> [ <expression> ]
<subexpression> ::= ( <expression> )
<sequence>      ::= { <semicolonlist> }
<table>         ::= [ ]
<table>         ::= [ <commalist> ]
<commalist>     ::= <expression>
<commalist>     ::= <expression> , <commalist>
<semicolonlist> ::= <expression>
<semicolonlist> ::= <expression> ; <semicolonlist>
<variable>      ::= <name>
<variable>      ::= <operator>
<operator>      ::= <power>
<operator>      ::= <multiplier>
<operator>      ::= <adder>
<operator>      ::= <comparator>
<scale>         ::= #exponent# + <number>
<scale>         ::= #exponent# - <number>
<scale>         ::= #exponent# <number>
<number>        ::= #digit#
<number>        ::= #digit# <number>
<fraction>      ::= <number> . <number> <scale>
<fraction>      ::= <number> . <number>
<fraction>      ::= <number> <scale>
<comparator>     ::= #comparator# <operator>
<adder>          ::= #adder# <operator>
<multiplier>     ::= #multiplier# <operator>
<power>          ::= #power# <operator>
<operator>       ::= #operator#
<operator>       ::= #operator# <operator>
<name>           ::= #letter# <rest>
<rest>           ::=
<rest>           ::= #digit# <rest>
<rest>           ::= #letter# <rest>

#letter#         = { a ,..., z , A ,..., Z , _ }
#digit#          = { 0 ,..., 9 }
#exponent#       = { e , E }
#comparator#     = { < , = , > }
#adder#          = { + , - , | }
#multiplier#     = { * , / , \ , & }
#power#          = { ^ }
#operator#       = #comparator# + #adder# +
                   #multiplier# + #power#

Back to the metacircular evaluator

This page was made (with lots of hard work!) by Wolfgang De Meuter