Skip to content

Is this project dead ? #17

@mingodad

Description

@mingodad

Hello !

I followed the gitlab project and it also seems to be abandoned, have you lost interest on pursue this project ?
Also you've seem to move away from cpp-peglib (your project https://github.com/mqnc/pegdebug also seems discontinued) creating your own peg parser in Lua https://github.com/mqnc/parserfaust .

I'm also interested in programming languages/parsers and that's why I found your projects.

Cheers !

For example with a fork of peg/leg here https://github.com/mingodad/peg and a bit of manual fixes I've got an EBNF to generate railroad diagram form the sandboxed grammar of cinnamon.

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

//To be viewd at https://www.bottlecaps.de/rr/ui

Cinnamon ::=
	 Skip ( GlobalStatement Skip )*

Skip ::=
	 _ ( LineBreak _ )*

GlobalStatement ::=
	 GlobalVariableDeclaration
	| FunctionDeclaration
	| ClassDeclaration
	| ImportStatement
	| FromImportStatement
	| CppGlobal
	| ScopeInspector
	| SyntaxError

SyntaxError ::=
	 ( _NOT_  NewLine . )* NewLine

NewLine ::=
	 '\r\n'
	| '\n'

LineBreak ::=
	 LineEndComment? NewLine

LineEndComment ::=
	 '//' ( _NOT_  NewLine . )*

Ellipsis ::=
	 '...'

LineContinue ::=
	 Ellipsis _ LineBreak

_ ::=
	 Space?

WhiteSpace ::=
	 [ \t]+

Space ::=
	 ( WhiteSpace | InlineComment | LineContinue )+

InlineComment ::=
	 MultiLineComment
	| NestableComment

Semicolon ::=
	 ';'

SilentTerminal ::=
	 LineBreak
	| Semicolon

Terminal ::=
	 SilentTerminal

MultiLineComment ::=
	 '/*' ( _NOT_  '*/' . )* '*/'

NestableComment ::=
	 '(*' ( _NOT_  '*)' ( NestableComment | . ) )* '*)'

Word ::=
	 AsciiWord
	| Utf8Word

AsciiWord ::=
	 AsciiWordStart AsciiWordMid* WordEnd

Utf8Word ::=
	 Utf8WordStart Utf8WordMid* WordEnd

AsciiWordStart ::=
	 [a-zA-Z_]

AsciiWordMid ::=
	 [a-zA-Z_0-9]

WordEnd ::=
	 _NOT_  Utf8WordMid

Utf8WordMid ::=
	 [a-zA-Z_0-9\x80-\xFF]

Utf8WordStart ::=
	 [a-zA-Z_\x80-\xFF]

Identifier ::=
	 _NOT_  Keyword Word

Keyword ::=
	 ( EndKeyword | Self | AssertMacro | Typeof | BooleanLiteral | ConstSpecifier | FunctionKeyword | FunctionInline | FunctionKwargs | IfKeyword | ElseIfKeyword | ElseKeyword | SwitchKeyword | CaseKeyword | FallKeyword | DefaultKeyword | WhileKeyword | BetweenKeyword | RepeatKeyword | RepWhileKeyword | UntilKeyword | ForKeyword | InKeyword | BreakKeyword | 'C++' | Scope ) WordEnd

IdentifierList ::=
	 Identifier ( _ Comma _ Identifier )*

Comma ::=
	 ','

IdentifierListMulti ::=
	 Identifier _ Comma _ Identifier ( _ Comma _ Identifier )*

Point ::=
	 '.'

LParen ::=
	 '('

RParen ::=
	 ')'

LBracket ::=
	 '['

RBracket ::=
	 ']'

LBrace ::=
	 '{'

RBrace ::=
	 '}'

DoubleQuote ::=
	 '"'

Colon ::=
	 ':'

Asterisk ::=
	 '*'

DblColon ::=
	 '::'

SilentComma ::=
	 ','

SilentLParen ::=
	 '('

SilentRParen ::=
	 ')'

SilentLBracket ::=
	 '['

SilentRBracket ::=
	 ']'

SilentLBrace ::=
	 '{'

SilentRBrace ::=
	 '}'

InsertComma ::=
	 ''

InsertLParen ::=
	 ''

InsertRParen ::=
	 ''

InsertLBracket ::=
	 ''

InsertRBracket ::=
	 ''

InsertLBrace ::=
	 ''

InsertRBrace ::=
	 ''

Empty ::=
	 ''

EndKeyword ::=
	 'end'

ScopedObjectOrSpecializedTypeOrFunction ::=
	 ObjectOrSpecializedTypeOrFunction
	| Self
	| TypeofExpression

ObjectOrSpecializedTypeOrFunction ::=
	 Identifier _ ( TemplateArguments | Empty )

Self ::=
	 "self"

TypeofExpression ::=
	 Typeof _ LParen _ Expression _ RParen

AssertMacro ::=
	 "assert"

ScopedResolvedObject ::=
	 ScopedObjectOrSpecializedTypeOrFunction ( _ ScopeResolutionOperator _ ObjectOrSpecializedTypeOrFunction )*

ScopeResolutionOperator ::=
	 "::"

ResolvedObject ::=
	 ObjectOrSpecializedTypeOrFunction ( _ ScopeResolutionOperator _ ObjectOrSpecializedTypeOrFunction )*

CallChainAppendix ::=
	 ( Ignore Point Ignore _ ResolvedObject )
	| Subscript
	| Call
	| KwargsCall

Ignore ::=
	 ' ~ '

Subscript ::=
	 ( ( LBracket _ Empty _ RBracket ) | ( LBracket _ ExpressionList _ RBracket ) ) _NOT_  ( _ AssignOperator )

Call ::=
	 LParen _ OptionalExpressionList _ RParen

KwargsCall ::=
	 LParen _ KwargsList _ RParen

TemplateArguments ::=
	 LTemplateBrace _ OptionalExpressionList _ RTemplateBrace

Typeof ::=
	 "typeof"

Expression ::=
	 Conditional

LTemplateBrace ::=
	 LBrace

OptionalExpressionList ::=
	 ExpressionList?

RTemplateBrace ::=
	 RBrace

ExpressionList ::=
	 Expression ( _ Comma _ Expression )*

AssignOperator ::=
	 ':='

KwargsList ::=
	 ( Expression _ Comma _ )* KwargAssignment ( _ Comma _ KwargAssignment )*

KwargAssignment ::=
	 Identifier Ignore _ Ignore AssignOperator Ignore _ Expression

Chain ::=
	 Atomic ( Ignore _ CallChainAppendix )*

Atomic ::=
	 AssertMacro
	| ScopedResolvedObject
	| Literal
	| Range
	| CppExpression
	| ParenthesizedExpression
	| BracedList

BooleanLiteral ::=
	 "true"
	| "false"

CharLiteral ::=
	 "'" ( ( '\\' . ) | . ) "'"

StringLiteral ::=
	 '"' ( ( '\\' . ) | ( _NOT_  '"' . ) )* '"'

FloatLiteral ::=
	 [0-9]+ '.' [0-9]+ ( ( 'e' | 'E' ) '-'? [0-9]+ )?

IntegerLiteral ::=
	 [0-9]+

HexLiteral ::=
	 '0' ( 'x' | 'X' ) [0-9]+

Literal ::=
	 ( BooleanLiteral | CharLiteral | StringLiteral | FloatLiteral | IntegerLiteral | HexLiteral ) WordEnd

LocalVariableDeclaration ::=
	 VariableDeclaration

VariableDeclaration ::=
	 VariableDeclaree _ TemplateParameters _ AssignOperator _ Assigned _ VariableSpecifiers _ Terminal

GlobalVariableDeclaration ::=
	 VariableDeclaration

VariableDeclaree ::=
	 ConstSpecifier _ ( IdentifierListMulti | Identifier )

TemplateParameters ::=
	 ( LTemplateBrace _ ParameterDeclarationList _ RTemplateBrace )?

Assigned ::=
	 AssignedTuple
	| Expression

VariableSpecifiers ::=
	 VariableSpecifierList
	| Empty

ConstSpecifier ::=
	 ConstantType
	| VariableType

Assignment ::=
	 TieToValues
	| AssignToSubscript
	| AssignToValue

TieToValues ::=
	 ExpressionListMulti _ AssignOperator _ Assigned _ Terminal

AssignToSubscript ::=
	 Expression _ LBracket _ ( ( InsertComma ExpressionList ) | ( Empty Empty ) ) _ RBracket _ AssignOperator _ Assigned _ Terminal

AssignToValue ::=
	 Expression _ AssignOperator _ Assigned _ Terminal

ExpressionListMulti ::=
	 Expression _ Comma _ Expression ( _ Comma _ Expression )*

AssignedTuple ::=
	 ExpressionListMulti

ConstantType ::=
	 'const'

VariableType ::=
	 'var'

InsertAuto ::=
	 ''

TypeDeclareOperator ::=
	 ':'

VariableSpecifierList ::=
	 SpecifierIndicator _ SomeVariableSpecifiers

SpecifierIndicator ::=
	 "|"

SomeVariableSpecifiers ::=
	 VariableSpecifier ( _ Comma _ VariableSpecifier )*

VariableSpecifier ::=
	 VariableExport
	| VariableStatic

VariableExport ::=
	 "export"

VariableStatic ::=
	 "persistent"

FunctionDeclaration ::=
	 FunctionKeyword _ Identifier _ TemplateParameters _ Parameters _ ReturnDeclaration _ FunctionSpecifiers _ Terminal FunctionBody EndFunctionKeyword

FunctionKeyword ::=
	 'function'

Parameters ::=
	 ParameterList
	| NoParameters

ReturnDeclaration ::=
	 ExplicitReturnDeclaration
	| DeduceReturnType

FunctionSpecifiers ::=
	 FunctionSpecifierList
	| Empty

FunctionBody ::=
	 Skip ( _NOT_  EndKeyword LocalStatement Skip )*

EndFunctionKeyword ::=
	 'end'

FunctionSpecifierList ::=
	 SpecifierIndicator _ SomeFunctionSpecifiers

SomeFunctionSpecifiers ::=
	 FunctionSpecifier ( _ Comma _ FunctionSpecifier )*

FunctionSpecifier ::=
	 FunctionInline
	| FunctionKwargs
	| FunctionExport

FunctionInline ::=
	 "inline"

FunctionKwargs ::=
	 "kwargs"

FunctionExport ::=
	 "export"

ExplicitReturnDeclaration ::=
	 ReturnOperator _ ReturnType

DeduceReturnType ::=
	 ''

ReturnOperator ::=
	 '->'

ReturnType ::=
	 ReturnTuple
	| ReturnStruct
	| ScopedObjectOrSpecializedTypeOrFunction

ReturnTuple ::=
	 SpecifiedType _ Comma _ SpecifiedType ( _ Comma _ SpecifiedType )*

ReturnStruct ::=
	 ReturnStructField _ Comma _ ReturnStructField ( _ Comma _ ReturnStructField )*

SpecifiedType ::=
	 ScopedObjectOrSpecializedTypeOrFunction

ReturnStructField ::=
	 Identifier _ TypeDeclareOperator _ ScopedObjectOrSpecializedTypeOrFunction

LocalStatement ::=
	 LocalVariableDeclaration
	| Assignment
	| ReturnStatement
	| IfStatement
	| SwitchStatement
	| WhileStatement
	| RepeatStatement
	| ForStatement
	| BreakStatement
	| Scope
	| ScopeInspector
	| ( Expression _ Terminal )
	| SyntaxError

ReturnStatement ::=
	 ReturnKeyword _ Returnee _ Terminal

ReturnKeyword ::=
	 'return'

Returnee ::=
	 Assigned
	| ReturnNothing

ReturnNothing ::=
	 ''

ParameterDeclarationList ::=
	 ( ParameterDeclaration ( _ Comma _ ParameterDeclaration )* )?

NoTemplateParameters ::=
	 ""

ParameterList ::=
	 LParen _ ParameterDeclarationList _ RParen

NoParameters ::=
	 ( LParen _ RParen )?

BracketParameters ::=
	 BracketParameterList
	| NoBracketParameters

BracketParameterList ::=
	 LBracket _ ParameterDeclarationList _ RBracket

NoBracketParameters ::=
	 LBracket _ RBracket

ParameterDeclaration ::=
	 ParameterKind _ Identifier _ ( ( Ignore TypeDeclareOperator Ignore _ ObjectOrSpecializedTypeOrFunction ) | Empty ) _ ( ( Ignore AssignOperator Ignore _ Expression ) | Empty )

ParameterKind ::=
	 TypeParameter
	| ValueParameter
	| ReferenceParameter
	| MutableReferenceParameter
	| VariableParameter
	| ConstantParameter

TypeParameter ::=
	 'type'

ValueParameter ::=
	 'val'

ReferenceParameter ::=
	 'ref'

MutableReferenceParameter ::=
	 'mutref'

VariableParameter ::=
	 'var'

ConstantParameter ::=
	 ''

IfStatement ::=
	 IfPart ElseIfPart* ElsePart? Ignore EndScope

IfPart ::=
	 Ignore IfKeyword _ Expression _ SilentTerminal IfBody

ElseIfPart ::=
	 Ignore ElseIfKeyword _ Expression _ SilentTerminal IfBody

ElsePart ::=
	 Ignore ElseKeyword _ SilentTerminal IfBody

EndScope ::=
	 EndKeyword

IfKeyword ::=
	 'if'

IfBody ::=
	 Skip ( _NOT_  ElseIfKeyword _NOT_  ElseKeyword _NOT_  EndKeyword LocalStatement Skip )*

ElseIfKeyword ::=
	 'elseif'

ElseKeyword ::=
	 'else'

SwitchStatement ::=
	 SwitchPart Skip CaseList Ignore EndScope

SwitchPart ::=
	 Ignore SwitchKeyword _ Expression _ SilentTerminal

CaseList ::=
	 Skip ( Case Skip )*

SwitchKeyword ::=
	 'switch'

Case ::=
	 ( CaseConditionList | DefaultKeyword ) _ SilentTerminal CaseBody Skip

CaseConditionList ::=
	 Ignore CaseKeyword _ CaseCondition ( _ ',' _ CaseCondition )*

DefaultKeyword ::=
	 'default'

CaseBody ::=
	 Skip ( _NOT_  CaseKeyword _NOT_  DefaultKeyword _NOT_  FallKeyword _NOT_  EndKeyword LocalStatement Skip )* OptionalFallStatement Skip

CaseKeyword ::=
	 'case'

CaseCondition ::=
	 Expression
	| DefaultKeyword

FallKeyword ::=
	 'fall'

OptionalFallStatement ::=
	 ( FallKeyword _ SilentTerminal )?

Range ::=
	 RangeL _ Expression _ RangeOperator _ ( Expression _ RangeOperator _ )? Expression? _ RangeR

RangeL ::=
	 LBracket
	| LParen

RangeOperator ::=
	 ".."

RangeR ::=
	 RBracket
	| RParen

WhileStatement ::=
	 WhileKeyword _ Expression _ SilentTerminal LoopBody EndScope

WhileKeyword ::=
	 'while'

LoopBody ::=
	 IterationBody ( BetweenKeyword IterationBody )?

RepeatStatement ::=
	 RepeatKeyword _ SilentTerminal LoopBody RepeatCondition ImplicitEndScope

RepeatKeyword ::=
	 'repeat'

RepeatCondition ::=
	 RepWhileCondition
	| UntilCondition

ImplicitEndScope ::=
	 ''

ForStatement ::=
	 ForKeyword _ ( VariableDeclaree | Expression ) _ InKeyword _ Expression _ SilentTerminal LoopBody EndScope

ForKeyword ::=
	 'for'

InKeyword ::=
	 'in'

IterationBody ::=
	 Skip ( _NOT_  BetweenKeyword _NOT_  EndKeyword _NOT_  RepWhileKeyword _NOT_  UntilKeyword LocalStatement Skip )*

BetweenKeyword ::=
	 'between'

RepWhileKeyword ::=
	 'whilst'

UntilKeyword ::=
	 'until'

RepWhileCondition ::=
	 RepWhileKeyword _ Expression _ SilentTerminal

UntilCondition ::=
	 UntilKeyword _ Expression _ SilentTerminal

BreakKeyword ::=
	 'break'

BreakStatement ::=
	 BreakKeyword _ Terminal

ClassDeclaration ::=
	 ClassKeyword _ ClassName _ ClassTemplateParameters _ OptionalInheritance _ ClassSpecifiers _ SilentTerminal ClassBody EndClassKeyword

ClassKeyword ::=
	 "class"

ClassName ::=
	 Identifier

ClassTemplateParameters ::=
	 TemplateParameters

OptionalInheritance ::=
	 Inheritance
	| NoInheritance

ClassSpecifiers ::=
	 ClassSpecifierList
	| Empty

ClassBody ::=
	 Skip ( _NOT_  EndKeyword ClassMemberDeclaration Skip )*

EndClassKeyword ::=
	 'end'

Inheritance ::=
	 InheritKeyword _ InheritanceList

NoInheritance ::=
	 ""

InheritKeyword ::=
	 "inherits"

InheritanceList ::=
	 InheritanceListItem ( _ Comma _ InheritanceListItem )*

InheritanceListItem ::=
	 PublicInheritanceItem
	| ProtectedInheritanceItem
	| PrivateInheritanceItem

PublicInheritanceItem ::=
	 ObjectOrSpecializedTypeOrFunction

ProtectedInheritanceItem ::=
	 LBracket _ ObjectOrSpecializedTypeOrFunction _ RBracket

PrivateInheritanceItem ::=
	 LParen _ ObjectOrSpecializedTypeOrFunction _ RParen

ClassSpecifierList ::=
	 SpecifierIndicator _ SomeClassSpecifiers

SomeClassSpecifiers ::=
	 ClassSpecifier ( _ Comma _ ClassSpecifier )*

ClassSpecifier ::=
	 ClassExport

ClassExport ::=
	 "export"

ClassMemberDeclaration ::=
	 CppGlobal
	| CppExpression
	| FieldDeclaration
	| MethodDeclaration
	| OperatorDeclaration
	| ScopeInspector
	| SyntaxError

CppGlobal ::=
	 CppKeyword _ CppSection _ ( Terminal | Empty ) _ LBrace CppCode RBrace

CppExpression ::=
	 CppKeyword _ ( Terminal | Empty ) _ LBrace CppCode RBrace

FieldDeclaration ::=
	 FieldAccess _ Identifier _ AssignOperator _ Assigned _ FieldSpecifiers _ Terminal

MethodDeclaration ::=
	 MethodAccess _ Identifier _ TemplateParameters _ Parameters _ ReturnDeclaration _ MemberSpecifiers _ Terminal FunctionBody EndFunctionKeyword

OperatorDeclaration ::=
	 CtorDeclaration
	| DtorDeclaration
	| CallDeclaration
	| SubscriptDeclaration

ScopeInspector ::=
	 "@"

CtorDeclaration ::=
	 CtorAccess _ Empty _ NoTemplateParameters _ Parameters _ Empty _ MemberSpecifiers _ Terminal CtorBody EndScope

DtorDeclaration ::=
	 DtorAccess _ Empty _ NoTemplateParameters _ NoParameters _ Empty _ MemberSpecifiers _ Terminal CtorDtorBody EndScope

CallDeclaration ::=
	 MethodAccess _ Empty _ NoTemplateParameters _ Parameters _ ReturnDeclaration _ MemberSpecifiers _ Terminal FunctionBody EndFunctionKeyword

SubscriptDeclaration ::=
	 MethodAccess _ Empty _ NoTemplateParameters _ BracketParameters _ ( SubscriptAssignment | ReturnDeclaration ) _ MemberSpecifiers _ Terminal FunctionBody EndFunctionKeyword

MemberSpecifiers ::=
	 SomeMemberSpecifiers
	| NoMemberSpecifiers

SomeMemberSpecifiers ::=
	 SpecifierIndicator _ MemberSpecifierList

NoMemberSpecifiers ::=
	 ""

MemberSpecifierList ::=
	 MemberSpecifier ( _ Comma _ MemberSpecifier )*

MemberSpecifier ::=
	 MemberConst
	| MemberVirtual
	| MemberOverride
	| MemberInline
	| MemberStatic
	| MemberKwargs

MemberConst ::=
	 "const"

MemberVirtual ::=
	 "virtual"

MemberOverride ::=
	 "override"

MemberInline ::=
	 "inline"

MemberStatic ::=
	 "shared"

MemberKwargs ::=
	 "kwargs"

MethodAccess ::=
	 PublicMethod
	| ProtectedMethod
	| PrivateMethod

PublicMethod ::=
	 MethodKeyword

ProtectedMethod ::=
	 LBracket _ MethodKeyword _ RBracket

PrivateMethod ::=
	 LParen _ MethodKeyword _ RParen

MethodKeyword ::=
	 "method"

SubscriptAssignment ::=
	 AssignOperator _ ParameterDeclaration

CtorAccess ::=
	 PublicCtor
	| ProtectedCtor
	| PrivateCtor

CtorBody ::=
	 Skip Inits CtorDtorBody

Inits ::=
	 InitList
	| Delegation
	| NoInits

CtorDtorBody ::=
	 Skip ( _NOT_  EndKeyword LocalStatement Skip )*

InitList ::=
	 InitKeyword _ Terminal _ FieldAssignmentList _ EndKeyword

Delegation ::=
	 CtorKeyword _ LParen _ ExpressionList _ RParen _ SilentTerminal

NoInits ::=
	 ""

PublicCtor ::=
	 CtorKeyword

ProtectedCtor ::=
	 LBracket _ CtorKeyword _ RBracket

PrivateCtor ::=
	 LParen _ CtorKeyword _ RParen

CtorKeyword ::=
	 "ctor"

InitKeyword ::=
	 "init"

FieldAssignmentList ::=
	 FieldAssignment _ Terminal ( _ FieldAssignment _ Terminal )*

FieldAssignment ::=
	 Self _ Point _ Identifier _ AssignOperator _ Assigned

DtorAccess ::=
	 PublicDtor
	| ProtectedDtor
	| PrivateDtor

PublicDtor ::=
	 DtorKeyword

ProtectedDtor ::=
	 LBracket _ DtorKeyword _ RBracket

PrivateDtor ::=
	 LParen _ DtorKeyword _ RParen

DtorKeyword ::=
	 "dtor"

FieldAccess ::=
	 PublicField
	| ProtectedField
	| PrivateField

FieldSpecifiers ::=
	 SomeFieldSpecifiers
	| Empty

PublicField ::=
	 ConstSpecifier

ProtectedField ::=
	 LBracket _ ConstSpecifier _ RBracket

PrivateField ::=
	 LParen _ ConstSpecifier _ RParen

SomeFieldSpecifiers ::=
	 SpecifierIndicator _ FieldSpecifierList

FieldSpecifierList ::=
	 FieldSpecifier ( _ Comma _ FieldSpecifier )*

FieldSpecifier ::=
	 MemberStatic

ImportStatement ::=
	 ImportKeyword _ Identifier _ ( ImportAlias | Empty ) _ ( ImportExport | Empty ) _ Terminal

ImportKeyword ::=
	 "import"

ImportAlias ::=
	 As _ Identifier

ImportExport ::=
	 SpecifierIndicator _ FunctionExport

FromImportStatement ::=
	 FromKeyword _ ScopeResChain _ ImportKeyword _ ( ImportTokenList | Asterisk ) _ ( ImportExport | Empty ) _ Terminal

FromKeyword ::=
	 "from"

ScopeResChain ::=
	 Identifier ( _ DblColon _ Identifier )*

ImportTokenList ::=
	 ImportToken ( _ Comma _ ImportToken )*

ImportToken ::=
	 Identifier _ ( ImportAlias | Empty )

As ::=
	 "as"

CppKeyword ::=
	 'C++'

CppCode ::=
	 ( CppComment | CppStringLiteral | CppScope | CppAnything )*

CppMember ::=
	 CppKeyword _ MemberKeyword _ ( Terminal | Empty ) _ LBrace CppCode RBrace

MemberKeyword ::=
	 "member"

CppSection ::=
	 Identifier

CppComment ::=
	 CppLineEndComment
	| CppMultiLineComment

CppStringLiteral ::=
	 CppCharConstant
	| CppSimpleString
	| CppRawString

CppScope ::=
	 '{' CppCode '}'

CppAnything ::=
	 _NOT_  '}' .

CppLineEndComment ::=
	 '//' ( _NOT_  '\n' . )* '\n'

CppMultiLineComment ::=
	 '/*' ( _NOT_  '*/' . )* '*/'

CppCharConstant ::=
	 "'" ( ( '\\' . ) | . ) "'"

CppSimpleString ::=
	 '"' ( ( '\\' . ) | ( _NOT_  '"' . ) )* '"'

CppRawString ::=
	 'R"' delim [a-zA-Z_0-9]* '(' ( _NOT_  ( ')' delim '"' ) . )* ')' delim '"'

delim ::=
	 UNDEFINED

Scope ::=
	 ScopeKeyword _ Terminal ScopeBody EndScope

ScopeKeyword ::=
	 "scope"

ScopeBody ::=
	 FunctionBody

Element ::=
	 Chain

Conditional ::=
	 Disjunction ( Ignore _ ConditionalBinary Ignore _ Disjunction )*

ParenthesizedExpression ::=
	 LParen _ Expression _ RParen

BracedList ::=
	 LBrace _ ExpressionList _ RBrace

PrefixUnary ::=
	 '+'
	| '-'
	| ( 'not' WordEnd )
	| ( 'bitnot' WordEnd )
	| ( 'sizeof' WordEnd )
	| '#'

Prefix ::=
	 ( PrefixUnary Ignore _ )* Element

ExponentiationBinary ::=
	 '^'

Exponentiation ::=
	 Prefix ( Ignore _ ExponentiationBinary Ignore _ Prefix )*

MultiplicationBinary ::=
	 '*'
	| '/'
	| ( 'div' WordEnd )
	| ( 'mod' WordEnd )

Multiplication ::=
	 Exponentiation ( Ignore _ MultiplicationBinary Ignore _ Exponentiation )*

AdditionBinary ::=
	 '+'
	| '-'

Addition ::=
	 Multiplication ( Ignore _ AdditionBinary Ignore _ Multiplication )*

ShiftingBinary ::=
	 '<<'
	| '>>'

Shifting ::=
	 Addition ( Ignore _ ShiftingBinary Ignore _ Addition )*

BitConjunctionBinary ::=
	 'bitand' WordEnd

BitConjunction ::=
	 Shifting ( Ignore _ BitConjunctionBinary Ignore _ Shifting )*

BitExclusiveDisjunctionBinary ::=
	 'bitxor' WordEnd

BitExclusiveDisjunction ::=
	 BitConjunction ( Ignore _ BitExclusiveDisjunctionBinary Ignore _ BitConjunction )*

BitDisjunctionBinary ::=
	 'bitor' WordEnd

BitDisjunction ::=
	 BitExclusiveDisjunction ( Ignore _ BitDisjunctionBinary Ignore _ BitExclusiveDisjunction )*

ComparisonBinary ::=
	 '=='
	| '!='
	| '<='
	| '>='
	| '<'
	| '>'

Comparison ::=
	 BitDisjunction ( Ignore _ ComparisonBinary Ignore _ BitDisjunction )*

ConjunctionBinary ::=
	 'and' WordEnd

Conjunction ::=
	 Comparison ( Ignore _ ConjunctionBinary Ignore _ Comparison )*

ExclusiveDisjunctionBinary ::=
	 'xor' WordEnd

ExclusiveDisjunction ::=
	 Conjunction ( Ignore _ ExclusiveDisjunctionBinary Ignore _ Conjunction )*

DisjunctionBinary ::=
	 'or' WordEnd

Disjunction ::=
	 ExclusiveDisjunction ( Ignore _ DisjunctionBinary Ignore _ ExclusiveDisjunction )*

ConditionalBinary ::=
	 '?' Ignore _ Expression Ignore _ ':'


//Added tokens for railroad generation
_NOT_ ::= '!'
_AND_ ::= '&'
_ANY_ ::= '.'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions