-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
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
Labels
No labels