Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grammar railroad diagram #6

Open
mingodad opened this issue Nov 12, 2022 · 0 comments
Open

Grammar railroad diagram #6

mingodad opened this issue Nov 12, 2022 · 0 comments

Comments

@mingodad
Copy link

mingodad commented Nov 12, 2022

After a bit of manual fixes I made an approximated EBNF understood by https://www.bottlecaps.de/rr/ui to generate a railroad diagram.

Copy and paste one of the EBNF shown bellow on https://www.bottlecaps.de/rr/ui on the tab Edit Grammar then click the tab View Diagram:

MaudeTop ::=
    ( SystemCommand | Command | DebuggerCommand |
       Module | Theory | View )+

SystemCommand ::= 'in' FileName | 'load' FileName | 'sload' FileName |
    'quit' | 'eof' | 'popd' | 'pwd' |
    'cd' Directory | 'push' Directory |
    'ls' ( LsFlag )? ( Directory )?

Command ::= 'select' ModId '.' |
    'parse' ( 'in' ModId ':' )? Term '.' |
    ( 'debug' )? 'reduce' ( 'in' ModId ':' )? Term '.' |
    ( 'debug' )? 'rewrite' ( ( Nat )? )? ( 'in' ModId ':' )? Term '.' |
    ( 'debug' )? 'frewrite' ( DoubleBound )? ( 'in' ModId ':'
        )? Term '.' |
    ( 'debug' )? 'erewrite' ( DoubleBound )? ( 'in' ModId ':' )?
        Term '.' |
    ( 'debug' )? ( 'srewrite' | 'dsrewrite' ) ( ( Nat )? )? ( 'in' ModId ':' )?
        Term 'using' Strat '.' |
    'check' ( 'in' ModId ':' )? Term '.' |
    ( 'match' | 'xmatch' ) ( ( Nat )? )? ( 'in' ModId ':' )?
        Term '<=?' Term ( 'such' 'that' Condition )? '.' |
    ( 'debug' )? 'variant' 'match' ( ( Nat )? )? ( 'in' ModId ':' )?
        Term '<=?' Term ( 'such' 'that' Condition )? '.' |
    ( 'irredudant' )? 'unify' ( ( Nat )? )? ( 'in' ModId ':' )?
        UnificationEquation  ( '/\' UnificationEquation )* '.' |
    ( 'debug' )? ( 'filtered' )? 'variant' 'unify' ( ( Nat )? )? ( 'in' ModId ':' )?
        UnificationEquation  ( '/\' UnificationEquation )* '.' |
    ( 'debug' )? 'get' ( 'irredundant' )? 'variants' ( ( Nat )? )? ( 'in' ModId ':' )? Term '.' |
    ( 'debug' )? 'search' ( DoubleBound )? ( 'in' ModId ':' )? Term SearchType Term
        ( 'such' 'that' Condition )? '.' |
    ( 'debug' )? ( '{fold}' )? 'vu-narrow' ( VariantOptionList )? ( DoubleBound )?
        ( 'in' ModId ':' )? Term SearchType Term '.' |
    ( 'debug' )? 'continue' Nat '.' |
    'loop' ( 'in' ModId ':' )? Term '.' |
    ( TokenString ) |
    'trace' ( 'select' | 'deselect' | 'include' | 'exclude' )
        ( OpId | ( OpForm ) )+ '.' |
    'print' ( 'conceal' | 'reveal' ) ( OpId | ( OpForm ) )+ '.' |
    'break' ( 'select' | 'deselect' ) ( OpId | ( OpForm ) )+ '.' |
    'show' ShowItem ( ModId )? '.' |
    'show' 'view' ( ViewId )? '.' |
    'show' 'modules' '.' |
    'show' 'views' '.' |
    'show' 'search' 'graph' '.' |
    'show' 'path' ( 'labels' )? Nat '.'
    'do' 'clear' 'memo' ( ModId )? '.' |
    'set' SetOption ( 'on' | 'off' ) '.'

DoubleBound ::= ( Nat ( ',' Nat )? )? | ( ',' Nat )?

SearchType ::= '=>1' | '=>+' | '=>*' | '=>!'

UnificationEquation ::= Term '=?' Term

ShowItem ::= 'module' | 'all' | 'desugared' | 'sorts' | 'ops' | 'vars' | 'mbs' |
    'eqs' | 'rls' | 'strats' | 'sds' | 'summary' | 'kinds' | 'profile'

SetOption ::= 'show' ShowOption |
    'print' PrintOption |
    'trace' ( TraceOption )? |
    'break' | 'verbose' | 'profile' |
    'clear' ( 'memo' | 'rules' | 'profile' ) |
    'protect' ModId |
    'extend' ModId |
    'include' ModId

ShowOption ::= 'advise' | 'stats' | 'loop' 'stats' | 'timing' |
    'loop' 'timing' | 'breakdown' | 'command' | 'gc'

PrintOption ::= 'mixfix' | 'flat' | 'with' 'parentheses' |
    'with' 'aliases' | 'conceal' | 'number' | 'rat' | 'color' |
    'format' | 'graph' | 'attribute' | 'attribute' 'newline' |
    'constants' 'with' 'sorts'

TraceOption ::= 'condition' | 'whole' | 'substitution' | 'select' |
    'mbs' | 'eqs' | 'rls' | 'sds' | 'rewrite' | 'body'

VariantOptionList ::= '{' VariantOption ( ',' VariantOptionList )* '}'

VariantOption ::= 'filter' | 'delay'

DebuggerCommand ::= 'resume' '.' | 'abort' '.' | 'step' '.' | 'where' '.'

Module ::= 'fmod' ModId ( ParameterList )? 'is' ModElt* 'endfm' |
    'mod' ModId ( ParameterList )? 'is' ModElt_* 'endm' |
    'smod' ModId ( ParameterList )? 'is' SmodElt* 'endsm'

Theory ::= 'fth' ModId 'is' ModElt* 'endfth' |
    'th' ModId 'is' ModElt_* 'endth' |
    'sth' ModId 'is' SmodElt* 'endsth'

View ::= 'view' ViewId ( ParameterList )? 'from' ModExp 'to' ModExp 'is'
             ViewElt*
           'endv'

ParameterList ::= '{' ParameterDecl ( ',' ParameterDecl )* '}'

ParameterDecl ::= ParameterId '::' ModExp

ModElt ::= 'including' ModExp '.' |
    'extending' ModExp '.' |
    'protecting' ModExp '.' |
    'sorts' Sort+ '.' |
    'subsorts' Sort+ ( '<' Sort+ )+ '.' |
    'op' OpForm ':' Type* Arrow Type ( Attr )? '.' |
    'ops' ( OpId | ( OpForm ) )+ ':' Type* Arrow Type
           ( Attr )? '.' |
    'vars' VarId+ ':' Type '.' |
    Statement ( StatementAttr )? '.'

ViewElt ::= 'var' 'var'Id+ ':' Type '.' |
    'sort' Sort 'to' Sort '.' |
    'label' LabelId 'to' LabelId '.' |
    'op' OpForm 'to' OpForm '.'  |
    'op' OpForm ':' Type* Arrow Type 'to' OpForm '.' |
    'op' Term 'to' 'term' Term '.' |
    'strat' StratId 'to' StratId '.' |
    'strat' StratId ( ':' Type* )? '@' Type 'to' StratId '.' |
    'strat' StratCall 'to' 'expr' Strat '.'

ModExp ::= ModId |
    ( ModExp ) |
    ModExp '+' ModExp |
    ModExp '*' Renaming
    ModExp '{' ViewId ( ',' ViewId )* '}'

Renaming ::= ( RenamingItem ( ',' RenamingItem )* )

RenamingItem ::= 'sort' Sort 'to' Sort |
    'label' LabelId 'to' LabelId |
    'op' OpForm ToPartRenamingItem |
    'op' OpForm ':' Type* Arrow Type ToPartRenamingItem
    'strat' StratId 'to' StratId |
    'strat' StratId ( ':' Type* )? '@' Type 'to' StratId |

ToPartRenamingItem ::= 'to' OpForm ( Attr )?

Arrow ::= '->' | '~>'

Type ::= Sort | Kind

Kind ::= ( Sort (',' Sort )* )?

Sort ::= SortId | Sort '{' Sort ( ',' Sort )* '}'

ModElt_ ::= ModElt |
    Statement_ ( StatementAttr )? '.'

SmodElt ::= 'including' ModExp '.' |
    'extending' ModExp '.' |
    'protecting' ModExp '.' |
    'vars' VarId+ ':' Type '.' |
    'strats' StratId+ ( ':' Type* )? '@' Type ( StratAttr )? '.'
    StratStatement ( StatementAttr )? '.'

Statement  ::=  'mb' ( Label )? Term ':' Sort |
    'cmb' ( Label )? Term ':' Sort 'if' Condition |
    'eq' ( Label )? Term '=' Term |
    'ceq' ( Label )? Term '=' Term 'if' Condition

Statement_ ::= 'rl' ( Label )? Term '=>' Term |
    'crl' ( Label )? Term '=>' Term 'if' Condition_

StratStatement ::= 'sd' StratCall ':=' Strat |
    'csd' StratCall ':=' Strat 'if' Condition

Label ::= ( LabelId )? ':'

Condition ::= ConditionFragment ( '/\' ConditionFragment )*

Condition_ ::= ConditionFragment_
                 ( '/\' ConditionFragment_ )*

ConditionFragment ::= Term '=' Term | Term ':=' Term
                        | Term ':' Sort

ConditionFragment_ ::= ConditionFragment | Term '=>' Term

Attr ::=
    ( ( 'assoc' | 'comm' |
        ( 'left' | 'right' )? 'id:' Term |
        'idem' | 'iter' | 'memo' | 'ditto' |
        'config' | 'obj' | 'msg' | 'ctor' |
        'metadata' StringId
        'strat' ( Nat+ ) |
        'poly' ( Nat+ ) |
        'frozen' ( ( Nat+ ) )? |
        'prec' Nat |
        'gather' ( ( 'e' | 'E' | '&' )+ ) |
        'format' ( Token+ ) |
        'special' ( Hook+ ) )+ )?

StratAttr ::= ( 'metadata' StringId )?

StatementAttr ::=
    ( ( 'nonexec' |
        'metadata' StringId |
        'label' LabelId  |
        'print' PrintItem* )+ )?

StatementAttrEq ::=
    ( ( StatementAttr | 'otherwise' | 'variant' )+ )?

StatementAttrRl ::=
    ( ( StatementAttr | 'narrowing' )+ )?

PrintItem ::= StringId | VarId | VarAndSortId

Hook ::= 'id-hook' Token ( ( TokenString ) )? |
    ( 'op-hook' | 'term-hook' ) Token ( TokenString )

Strat ::= 'idle' | 'fail' |
    RuleApp | 'top'( RuleApp ) |
    Strat '?' Strat ':' Strat |
    TestVariant Term ( 'such' 'that' Condition )?
    Strat ';' Strat |
    Strat | Strat |
    Strat '*' |
    MrewVariant Term ( 'such' 'that' Condition )? 'by' VarStratList
    StratCall
    Strat '+'
    Strat 'or-else' Strat
    'not'( Strat )
    Strat '!'
    'try'( Strat )
    'test'( Strat )

RuleApp ::= LabelId ( ( Substitution )? )? ( '{' Strat (',' Strat)* '}' )?

Substitution ::= VarId '<-' Term |
    Substitution ',' Substitution

StratCall ::= StratId ( '()' )? |
    StratId ( Term (',' Term)* )

VarStratList ::= VarId 'using' Strat |
    VarStratList ',' VarStratList

TestVariant ::= 'match' | 'xmatch' | 'amatch'

MrewVariant ::= 'matchrew' | 'xmatchrew' | 'amatchrew'

FileName    //%%% OS 'dependent'
Directory   //%%% OS 'dependent'
LsFlag      //%%% OS 'dependent'

StringId    //%%% 'characters' 'enclosed' 'in' 'double' 'quotes' "'.''.''.'"
ModId       //%%% 'simple' 'identifier'',' 'by' 'convention' 'all' 'capitals'
ViewId      //%%% 'simple' 'identifier'',' 'by' 'convention' 'capitalized'
ParameterId //%%% 'simple' 'identifier'',' 'by' 'convention' 'single' 'capital'
SortId      //%%% 'simple' 'identifier'',' 'by' 'convention' 'capitalized'
VarId       //%%% 'simple' 'identifier'',' 'by' 'convention' 'capitalized'
VarAndSortId //%%% 'an' 'identifier' 'consisting' 'of' 'a' 'variable' 'name'
                   'followed' 'by' 'a' 'colon' 'followed' 'by' 'a' 'sort' 'name'
OpId        //%%% 'identifier' 'possibly' 'with' 'underscores'
OpForm ::= OpId | ( OpForm ) | OpForm+
Nat         //%%% 'a' 'natural' 'number'
Term ::= Token | ( Term ) | Term+
Token       //%%% 'sequence' 'of' 'printable' ASCII 'characters' 'delimited' 'by'
                  'whitespace''.' The 'symbols' (',' )',' (',' )?',' '{,' '}' 'and' 'comma' 'form'
                  'separate' 'tokens' 'themselves'',' 'unless' 'backquoted'
TokenString ::= Token | ( TokenString ) | TokenString*
LabelId     //%%% 'simple' 'identifier'
StratId     //%%% 'simple' 'identifier'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant