diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-04-27 16:45:11 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-04-27 16:45:35 -0700 |
| commit | b54829de363f67a8a6f6131ceb0eb27aa09d4292 (patch) | |
| tree | c03e3a7ad9a5cd58d0055b262e0ddf1bca89ba97 /nomsu.peg | |
| parent | 6fecb5d3950949d3bcf232f74283229248c21247 (diff) | |
Better text interpolation/handling of "\". Also added syntax support for
(statement; statement)
Diffstat (limited to 'nomsu.peg')
| -rw-r--r-- | nomsu.peg | 23 |
1 files changed, 10 insertions, 13 deletions
@@ -11,20 +11,20 @@ statement: action / expression inline_statement: inline_action / inline_expression inline_block (Block): - {| inline_statement (";" inline_statement)+ |} + {| inline_statement (%ws* ";" %ws* inline_statement)+ |} -> Tuple block (Block): {| statement (nodent statement)+ |} -> Tuple inline_nomsu (Nomsu): "\" noindex_inline_expression indented_nomsu (Nomsu): - "\" (noindex_inline_expression / (":" %ws* (inline_action / inline_expression) eol) / indented_expression) + "\" (noindex_inline_expression / (":" %ws* (inline_block / inline_action / inline_expression) eol) / indented_expression) index_chain (IndexChain): {| noindex_inline_expression ("." ((({} ({|{%operator / (!number plain_word)}|} -> Tuple) {}) -> Text) / noindex_inline_expression))+ |} -> Tuple noindex_inline_expression: number / variable / inline_text / inline_list / inline_dict / inline_nomsu - / ("(" %ws* (inline_action / inline_expression) %ws* ")") + / ("(" %ws* (inline_block / inline_action / inline_expression) %ws* ")") inline_expression: index_chain / noindex_inline_expression @@ -36,12 +36,12 @@ indented_expression: / block (dedent / (("" -> "Error while parsing indented expression") => error))) ) expression: - inline_expression / (":" %ws* (inline_action / inline_expression) eol) / indented_expression + inline_expression / (":" %ws* (inline_block / inline_action / inline_expression) eol) / indented_expression -- Function calls need at least one word in them inline_action (Action): {| (inline_expression %ws*)* word (%ws* (inline_expression / word))* - (%ws* ":" %ws* (inline_action / inline_expression))?|} -> Tuple + (%ws* ":" %ws* (inline_block / inline_action / inline_expression))?|} -> Tuple action (Action): {| (expression (dotdot / %ws*))* word ((dotdot / %ws*) (expression / word))* |} -> Tuple @@ -58,20 +58,17 @@ indented_text (Text): '".."' eol %nl ({| {~ (%nl*) (%indent -> "") ~} ({~ - (("\\" -> "\") / (("\" eol %nl+ %nodent "..") -> "") - / (%nl+ {~ %nodent -> "" ~}) / [^%nl\])+ + (("\\" -> "\") / (("\" nodent "..") -> "")/ (%nl+ {~ %nodent -> "" ~}) / [^%nl\] / (!text_interpolation "\"))+ ~} / text_interpolation)* |} -> Tuple) (((!.) &%dedent) / (&(%nl %dedent)) / (("" -> "Error while parsing Text") => error)) inline_text_interpolation: "\" ( variable / inline_list / inline_dict / inline_text - / ("(" %ws* (inline_action / inline_expression) %ws* ")") + / ("(" %ws* (inline_block / inline_action / inline_expression) %ws* ")") ) text_interpolation: inline_text_interpolation / - ("\" - (block_comment / line_comment / indented_expression)? - nodent "..") + ("\" indented_expression nodent "..") number (Number): (("-"? (([0-9]+ "." [0-9]+) / ("." [0-9]+) / ([0-9]+)))-> tonumber) @@ -90,7 +87,7 @@ indented_list (List): list_line: ((action / expression) !comma) / (inline_list_item (comma list_line?)?) -inline_list_item: inline_action / inline_expression +inline_list_item: inline_block / inline_action / inline_expression inline_dict (Dict): !('{..}') @@ -104,7 +101,7 @@ dict_line: ((dict_key %ws* ":" %ws* (action / expression)) -> DictEntry !comma) / (inline_dict_item (comma dict_line?)?) inline_dict_item: - (dict_key %ws* ":" %ws* (inline_action / inline_expression)) -> DictEntry + (dict_key %ws* ":" %ws* (inline_block / inline_action / inline_expression)) -> DictEntry dict_key: (({} ({|{%operator / (!number plain_word)}|} -> Tuple) {}) -> Text) / inline_expression |
