Skip to content

Grammar railroad diagram #2

Description

@mingodad

I've just added MetaDSL grammar to https://mingodad.github.io/parsertl-playground/playground/ an Yacc/Lex compatible online editor/tester (select "MetaDSL parser" from "Examples" then click "Parse" to see a parse tree for the content in Input source).

My translation of MetaDSL is not complete and would be nice if the author could complete it and send a pull request or post it here.

I hope it can help develop/debug/document the MetaDSL grammar.

Any feedback is welcome !

And it can also generate an EBNF accepted by https://www.bottlecaps.de/rr/ui to generate a nice navigable railroad diagram (see bellow).

//
// EBNF to be viewd at https://www.bottlecaps.de/rr/ui
//
// Copy and paste this at https://www.bottlecaps.de/rr/ui in the 'Edit Grammar' tab
// then click the 'View Diagram' tab.
//

PROGRAM::=
	  STATEMENTS

STATEMENTS::=
	  STATEMENT
	| STATEMENTS SEP STATEMENT

STATEMENT::=
	  OPERATOR_STATEMENT_DESC_0

OPERATOR_STATEMENT_0::=
	  OPERATOR_STATEMENT_DESC_0

OPERATOR_STATEMENT_1::=
	  OPERATOR_STATEMENT_DESC_1

OPERATOR_STATEMENT_COLON::=
	  OPERATOR_STATEMENT_DESC_COLON

OPERATOR_STATEMENT_QUESTION_COLON::=
	  OPERATOR_STATEMENT_DESC_QUESTION_COLON

OPERATOR_STATEMENT_4::=
	  OPERATOR_STATEMENT_DESC_4

OPERATOR_STATEMENT_5::=
	  OPERATOR_STATEMENT_DESC_5

OPERATOR_STATEMENT_6::=
	  OPERATOR_STATEMENT_DESC_6

OPERATOR_STATEMENT_7::=
	  OPERATOR_STATEMENT_DESC_7

OPERATOR_STATEMENT_8::=
	  OPERATOR_STATEMENT_DESC_8

OPERATOR_STATEMENT_9::=
	  OPERATOR_STATEMENT_DESC_9

OPERATOR_STATEMENT_10::=
	  OPERATOR_STATEMENT_DESC_10

OPERATOR_STATEMENT_11::=
	  OPERATOR_STATEMENT_DESC_11

OPERATOR_STATEMENT_12::=
	  OPERATOR_STATEMENT_DESC_12

OPERATOR_STATEMENT_13::=
	  OPERATOR_STATEMENT_DESC_13

OPERATOR_STATEMENT_14::=
	  OPERATOR_STATEMENT_DESC_14

OPERATOR_STATEMENT_15::=
	  OPERATOR_STATEMENT_DESC_15

OPERATOR_STATEMENT_DESC_0::=
	  OPERATOR_STATEMENT_DESC_1
	| OPERATOR_STATEMENT_DESC_1 OP_TOKEN_0 OPERATOR_STATEMENT_0

OPERATOR_STATEMENT_DESC_1::=
	  OPERATOR_STATEMENT_DESC_2
	| OPERATOR_STATEMENT_DESC_2 OP_TOKEN_1 OPERATOR_STATEMENT_1

OPERATOR_STATEMENT_DESC_2::=
	  OPERATOR_STATEMENT_DESC_COLON
	| OPERATOR_STATEMENT_DESC_2 OP_TOKEN_2 OPERATOR_STATEMENT_COLON

OPERATOR_STATEMENT_DESC_COLON::=
	  OPERATOR_STATEMENT_DESC_QUESTION_COLON
	| OPERATOR_STATEMENT_DESC_COLON OP_TOKEN_COLON OPERATOR_STATEMENT_QUESTION_COLON

OPERATOR_STATEMENT_DESC_QUESTION_COLON::=
	  OPERATOR_STATEMENT_DESC_3
	| OPERATOR_STATEMENT_DESC_3 OP_TOKEN_QUESTION OPERATOR_STATEMENT_QUESTION_COLON OP_TOKEN_COLON OPERATOR_STATEMENT_QUESTION_COLON

OPERATOR_STATEMENT_DESC_3::=
	  OPERATOR_STATEMENT_DESC_4
	| OPERATOR_STATEMENT_DESC_3 OP_TOKEN_3 OPERATOR_STATEMENT_4

OPERATOR_STATEMENT_DESC_4::=
	  OPERATOR_STATEMENT_DESC_5
	| OPERATOR_STATEMENT_DESC_4 OP_TOKEN_4 OPERATOR_STATEMENT_5

OPERATOR_STATEMENT_DESC_5::=
	  OPERATOR_STATEMENT_DESC_6
	| OPERATOR_STATEMENT_DESC_5 OP_TOKEN_5 OPERATOR_STATEMENT_6

OPERATOR_STATEMENT_DESC_6::=
	  OPERATOR_STATEMENT_DESC_7
	| OPERATOR_STATEMENT_DESC_6 OP_TOKEN_6 OPERATOR_STATEMENT_7

OPERATOR_STATEMENT_DESC_7::=
	  OPERATOR_STATEMENT_DESC_8
	| OPERATOR_STATEMENT_DESC_7 OP_TOKEN_7 OPERATOR_STATEMENT_8

OPERATOR_STATEMENT_DESC_8::=
	  OPERATOR_STATEMENT_DESC_9
	| OPERATOR_STATEMENT_DESC_8 OP_TOKEN_8 OPERATOR_STATEMENT_9

OPERATOR_STATEMENT_DESC_9::=
	  OPERATOR_STATEMENT_DESC_10
	| OPERATOR_STATEMENT_DESC_9 OP_TOKEN_9 OPERATOR_STATEMENT_10

OPERATOR_STATEMENT_DESC_10::=
	  OPERATOR_STATEMENT_DESC_11
	| OPERATOR_STATEMENT_DESC_10 OP_TOKEN_10 OPERATOR_STATEMENT_11

OPERATOR_STATEMENT_DESC_11::=
	  OPERATOR_STATEMENT_DESC_12
	| OPERATOR_STATEMENT_DESC_11 OP_TOKEN_11 OPERATOR_STATEMENT_12

OPERATOR_STATEMENT_DESC_12::=
	  OPERATOR_STATEMENT_DESC_13
	| OPERATOR_STATEMENT_DESC_12 OP_TOKEN_12 OPERATOR_STATEMENT_13

OPERATOR_STATEMENT_DESC_13::=
	  OPERATOR_STATEMENT_DESC_14
	| OPERATOR_STATEMENT_DESC_13 OP_TOKEN_13 OPERATOR_STATEMENT_14

OPERATOR_STATEMENT_DESC_14::=
	  OPERATOR_STATEMENT_DESC_15
	| OPERATOR_STATEMENT_DESC_14 OP_TOKEN_14 OPERATOR_STATEMENT_15

OPERATOR_STATEMENT_DESC_15::=
	  FUNCTION_STATEMENT_DESC
	| OPERATOR_STATEMENT_DESC_15 OP_TOKEN_15 FUNCTION_STATEMENT

FUNCTION_STATEMENT::=
	  FUNCTION_STATEMENT_DESC

FUNCTION_STATEMENT_DESC::=
	  FUNCTION_CALLS

FUNCTION_CALLS::=
	  FUNCTION_EX_CALL_zom
	| FUNCTION_EX_CALL_SPECIAL FUNCTION_EX_CALL_zom

FUNCTION_EX_CALL_zom::=
	  /*%empty*/
	| FUNCTION_EX_CALL_zom FUNCTION_EX_CALL

FUNCTION_EX_CALL::=
	  FUNCTION_ID
	| FUNCTION_ID FUNCTION_PARAMS

FUNCTION_EX_CALL_SPECIAL::=
	  FUNCTION_PARAMS

FUNCTION_PARAMS::=
	  FUNCTION_PARAMS0
	| FUNCTION_PARAMS0 FUNCTION_PARAMS

FUNCTION_PARAMS0::=
	  '(' STATEMENTS ')'
	| '[' STATEMENTS ']'
	| "::" STATIC_MEMBER_DESC
	| '.' MEMBER_DESC
	| QUESTION_PERIOD MEMBER_DESC2
	| QUESTION_PARENTHESIS STATEMENTS ')'
	| QUESTION_BRACKET STATEMENTS ']'
	| QUESTION_BRACE STATEMENTS '}'
	| POINTER MEMBER_DESC3
	| PERIOD_STAR MEMBER_DESC4
	| QUESTION_PERIOD_STAR MEMBER_DESC5
	| POINTER_STAR MEMBER_DESC6
	| '{' STATEMENTS '}'
	| SCRIPT_CONTENT
	| BRACKET_COLON_BEGIN STATEMENTS BRACKET_COLON_END
	| PARENTHESIS_COLON_BEGIN STATEMENTS PARENTHESIS_COLON_END
	| ANGLE_BRACKET_COLON_BEGIN STATEMENTS ANGLE_BRACKET_COLON_END
	| BRACE_PERCENT_BEGIN STATEMENTS BRACE_PERCENT_END
	| BRACKET_PERCENT_BEGIN STATEMENTS BRACKET_PERCENT_END
	| PARENTHESIS_PERCENT_BEGIN STATEMENTS PARENTHESIS_PERCENT_END
	| ANGLE_BRACKET_PERCENT_BEGIN STATEMENTS ANGLE_BRACKET_PERCENT_END

STATIC_MEMBER_DESC::=
	  MEMBER_DESC

MEMBER_DESC::=
	  FUNCTION_ID
	| '(' STATEMENTS ')'
	| '[' STATEMENTS ']'
	| '{' STATEMENTS '}'

MEMBER_DESC2::=
	  FUNCTION_ID

MEMBER_DESC3::=
	  FUNCTION_ID

MEMBER_DESC4::=
	  FUNCTION_ID

MEMBER_DESC5::=
	  FUNCTION_ID

MEMBER_DESC6::=
	  FUNCTION_ID

FUNCTION_ID::=
	  IDENTIFIER
	| STRING
	| NUMBER
	| DOLLAR_STRING

SEP::=
	  ','
	| ';'

//Tokens

ANGLE_BRACKET_COLON_BEGIN ::= "<:"
ANGLE_BRACKET_COLON_END ::= ":>"
ANGLE_BRACKET_PERCENT_BEGIN ::= "<%"
ANGLE_BRACKET_PERCENT_END ::= "%>"
BRACE_PERCENT_BEGIN ::= "{%"
BRACE_PERCENT_END ::= "%}"
BRACKET_COLON_BEGIN ::= "[:"
BRACKET_COLON_END ::= ":]"
BRACKET_PERCENT_BEGIN ::= "[%"
BRACKET_PERCENT_END ::= "%]"
OP_TOKEN_0 ::= "="
OP_TOKEN_1 ::= "=>"|"<-"
OP_TOKEN_10 ::= "<<"|">>"|">>>"
OP_TOKEN_11 ::= "+"|"-"
OP_TOKEN_12 ::= "*"|"/"|"%"|".."
OP_TOKEN_13 ::= "++"|"--"|"~"|"!"
OP_TOKEN_3 ::= "||"|"??"
OP_TOKEN_4 ::= "&&"
OP_TOKEN_5 ::= "|"
OP_TOKEN_6 ::= "^"
OP_TOKEN_7 ::= "&"
OP_TOKEN_8 ::= "=="|"!="|"<=>"
OP_TOKEN_9 ::= "<="|">="|"<"|">"
OP_TOKEN_COLON ::= ":"
OP_TOKEN_QUESTION ::= "?"
PARENTHESIS_COLON_BEGIN ::= "(:"
PARENTHESIS_COLON_END ::= ":)"
PARENTHESIS_PERCENT_BEGIN ::= "(%"
PARENTHESIS_PERCENT_END ::= "%)"
PERIOD_STAR ::= ".*"
POINTER ::= "->"
POINTER_STAR ::= "->*"
QUESTION_BRACE ::= "?{"
QUESTION_BRACKET ::= "?["
QUESTION_PARENTHESIS ::= "?("
QUESTION_PERIOD ::= "?."
QUESTION_PERIOD_STAR ::= "?.*"

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