Create Your Own ‘Language’

Yes. The best way is a create Flex and Yacc(or GNU Bison) files to lex and parse your BNF grammars. For example, BNF grammar:

<program> ::= <line>*

<line> ::= (<funcall> | <var> | <if>) "\n"

<var> ::= <name> " = " <exp>

<if> ::= "if " <bool>  ":\n" ("\t" <line>)+ ("else:\n" ("\t" <line>)+)

<name> ::= (([a-z] | [A-Z] | "_") | (<name> | [0-9]))+

<bool> ::= "true" | "false"
| <exp> (">" | "<" | "==" | "!=") <exp>
| "!" <bool>
| <bool> " and " | " or " <bool>

<int> ::= [1-9][0-9]*

<str> ::= '"' <name> '"'

<exp> ::= <bool>
| "(" <exp> ")"
| <exp> ("+" | "-" | "*" | "/" | "%" | "**") <exp>
| <int>
| <str>
| <funcall>

<funccall> ::= <name> "(" (<exp> (", " <exp>)*) ")"

Try it in the BNF Playground.

2 Likes

BNF is the way to create programming language or other grammars only