All pastes #10121 Raw Edit

alphabeta

public text v1 · immutable
#10121 ·published 2005-04-23 04:59 UTC
rendered paste body
"Start Symbol" = <File>

! ------------------------------------------------- Sets

{ID Head}      = {Letter} + [_]
{ID Tail}      = {Alphanumeric} + [_]
{String Chars} = {Printable} - ["\]
{Number Types} = [fd]

! ------------------------------------------------- Terminals

Identifier    = {ID Head}{ID Tail}*
StringLiteral = '"' ( {String Chars} | '\' {Printable} )* '"'
!DecimalLiteral = '{Numeric}.{Numeric}{Number Types}?'
DecimalLiteral = '{Numeric}.{Numeric}'

FloatLiteral = '{Numeric}*(.{Numeric}*)?f'
DoubleLiteral = '{Numeric}*(.{Numeric}*)?d?'


!IntegerLiteral = '{Numeric}{Number Types}?'
IntegerLiteral = '{Numeric}'

! ------------------------------------------------- Rules

<Name>                ::= <SimpleName>
                        | <QualifiedName>
<SimpleName>          ::= Identifier
<QualifiedName>       ::= <QualifiedName> '.' <Name>

<ReturnType>          ::= <Name>
                        | 'void'

<BooleanExpression>   ::= <RValue> '>'  <Add Exp> 
                        | <RValue> '<'  <Add Exp> 
                        | <RValue> '<=' <Add Exp> 
                        | <RValue> '>=' <Add Exp>
                        | <RValue> '==' <Add Exp>    !Equal
                        | <RValue> '<>' <Add Exp>    !Not equal
                        | <RValue>

<NumericalExpression> ::= <Add Exp>

<Add Exp>             ::= <Add Exp> '+' <Mult Exp>
                        | <Add Exp> '-' <Mult Exp>
                        | <Mult Exp> 

<Mult Exp>            ::= <Mult Exp> '*' <Negate Exp> 
                        | <Mult Exp> '/' <Negate Exp> 
                        | <Mult Exp> '%' <Negate Exp>
                        | <Negate Exp> 

<Negate Exp>          ::= '-' <RValue>
                        | <RValue> '++'
                        | <RValue> '--'
                        | '++' <RValue> 
                        | '--' <RValue> 
                        | <RValue> 

! ----------------------------------------------- Values -----------------------------------------------

<RValue>              ::= <Literal>
                        | <BooleanExpression>

<LValue>              ::= <Name>
                        | <RValue>

<Literal>             ::= <NumericalLiteral>
                        | <BooleanLiteral>
                        | StringLiteral
                        | 'null'

<NumericalLiteral>    ::= FloatLiteral
                        | DoubleLiteral
                        | IntegerLiteral
<BooleanLiteral>      ::= 'true'
                        | 'false'

! ----------------------------------------------- Language Constructs -----------------------------------------------

<File>                ::= <FileLevelItems>

! Items at the root of a file
<FileLevelItems>      ::= <FileLevelItem> <FileLevelItems>
                        | <FileLevelItem>
                        | ''
<FileLevelItem>       ::= <NamespaceDeclaration>
                        | <UsingStatement>

! Namespace Items
<NamespaceLevelItems> ::= <NamespaceLevelItem> <NamespaceLevelItems>
                        | <NamespaceLevelItem>
                        | ''
<NamespaceLevelItem>  ::= <AccessModifier> <ClassDeclaration>
                        | <AccessModifier> <DelegateDeclaration>
                        | <FileLevelItem>

! Class members
<ClassLevelItems>     ::= <ClassLevelItem> <ClassLevelItems>
                        | <ClassLevelItem>
                        | ''
<ClassLevelItem>      ::= <AccessModifier> <VariableDeclaration>
                        | <AccessModifier> <MethodDeclaration>
                        | <NamespaceLevelItem>

! Statements
<MethodLevelItems>    ::= <MethodLevelItem> <MethodLevelItems>
                        | <MethodLevelItem>
                        | ''
<MethodLevelItem>     ::= <LValue> '=' <RValue>   ! Assignment operator
                        | <VariableDeclaration>

! ----------------------------------------------- Declarations -----------------------------------------------

! Import a namespace's symbols
<UsingStatement>      ::= 'using' <Name>
<NamespaceDeclaration>::= 'namespace' <Name> '{' <NamespaceLevelItems> '}'

<ClassDeclaration>    ::= 'class' Identifier '{' <ClassLevelItems> '}'
<DelegateDeclaration> ::= 'delegate' <MethodSignature> ';'

<VariableDeclaration> ::= <Name> Identifier ';'
<MethodDeclaration>   ::= <MethodModifier> <MethodSignature> '{' <MethodLevelItems> '}'

<MethodSignature>     ::= <ReturnType> <Name> '(' <MethodArguments> ')'
                        | 'void' <ReturnType> '(' <MethodArguments> ')'
<MethodArguments>     ::= <MethodArgument> <MethodArguments>
                        | <MethodArgument>
                        | ''
<MethodArgument>      ::= <Name> Identifier

! ----------------------------------------------- Modifiers -----------------------------------------------

<AccessModifier>      ::= 'public'
                        | 'internal'
                        | 'private'
                        | ''
<MethodModifier>      ::= 'static'
                        | 'abstract'
                        | 'virtual'
                        | ''