|
|
@ -20,7 +20,7 @@ static auto g_grammar = R"( |
|
|
|
PRIMARY <- CONDITION (CONDITION_OPERATOR CONDITION)? |
|
|
|
PRIMARY <- CONDITION (CONDITION_OPERATOR CONDITION)? |
|
|
|
CONDITION <- TERM (TERM_OPERATOR TERM)* |
|
|
|
CONDITION <- TERM (TERM_OPERATOR TERM)* |
|
|
|
TERM <- FACTOR (FACTOR_OPERATOR FACTOR)* |
|
|
|
TERM <- FACTOR (FACTOR_OPERATOR FACTOR)* |
|
|
|
FACTOR <- WHILE / IF / FUNCTION / FUNCTION_CALL / NUMBER / BOOLEAN / STRING / IDENTIFIER / '(' _ EXPRESSION ')' _ |
|
|
|
FACTOR <- WHILE / IF / FUNCTION / FUNCTION_CALL / NUMBER / BOOLEAN / STRING / INTERPOLATED_STRING / IDENTIFIER / '(' _ EXPRESSION ')' _ |
|
|
|
|
|
|
|
|
|
|
|
BLOCK <- '{' _ STATEMENTS '}' _ |
|
|
|
BLOCK <- '{' _ STATEMENTS '}' _ |
|
|
|
|
|
|
|
|
|
|
@ -33,6 +33,9 @@ static auto g_grammar = R"( |
|
|
|
BOOLEAN <- < ('true' / 'false') > _ |
|
|
|
BOOLEAN <- < ('true' / 'false') > _ |
|
|
|
STRING <- ['] < (!['] .)* > ['] _ |
|
|
|
STRING <- ['] < (!['] .)* > ['] _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INTERPOLATED_STRING <- '"' ('{' _ EXPRESSION '}' / INTERPOLATED_CONTENT)* '"' _ |
|
|
|
|
|
|
|
INTERPOLATED_CONTENT <- (!["{] .) (!["{] .)* |
|
|
|
|
|
|
|
|
|
|
|
~_ <- (Space / EndOfLine / Comment)* |
|
|
|
~_ <- (Space / EndOfLine / Comment)* |
|
|
|
Space <- ' ' / '\t' |
|
|
|
Space <- ' ' / '\t' |
|
|
|
EndOfLine <- '\r\n' / '\n' / '\r' |
|
|
|
EndOfLine <- '\r\n' / '\n' / '\r' |
|
|
@ -76,6 +79,8 @@ peglib::peg& get_parser() |
|
|
|
.ast_token("BOOLEAN", Boolean) |
|
|
|
.ast_token("BOOLEAN", Boolean) |
|
|
|
.ast_token("STRING") |
|
|
|
.ast_token("STRING") |
|
|
|
.ast_token("IDENTIFIER", Identifier) |
|
|
|
.ast_token("IDENTIFIER", Identifier) |
|
|
|
|
|
|
|
.ast_node("INTERPOLATED_STRING", InterpolatedString) |
|
|
|
|
|
|
|
.ast_token("INTERPOLATED_CONTENT") |
|
|
|
.ast_end(); |
|
|
|
.ast_end(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|