From 5440b846a04802626dd5c4ebc8d19e52eb5afc99 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 14 May 2020 10:39:00 +0800 Subject: fix issue of unary and binary operator "~". --- src/MoonP/moon_compiler.cpp | 2 +- src/MoonP/moon_parser.cpp | 11 ++++++----- src/MoonP/moon_parser.h | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp index 6d07e9e..36b6b11 100644 --- a/src/MoonP/moon_compiler.cpp +++ b/src/MoonP/moon_compiler.cpp @@ -43,7 +43,7 @@ inline std::string s(std::string_view sv) { } const std::string_view version() { - return "0.3.12"sv; + return "0.3.13"sv; } // name of table stored in lua registry diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp index 5b537a1..2d71567 100644 --- a/src/MoonP/moon_parser.cpp +++ b/src/MoonP/moon_parser.cpp @@ -44,7 +44,8 @@ MoonParser::MoonParser() { multi_line_content = *(not_(multi_line_close) >> Any); MultiLineComment = multi_line_open >> multi_line_content >> multi_line_close; EscapeNewLine = expr('\\') >> *(set(" \t") | MultiLineComment) >> -Comment >> Break; - Space = *(set(" \t") | and_(set("-\\")) >> (MultiLineComment | EscapeNewLine)) >> -Comment; + space_one = set(" \t") | and_(set("-\\")) >> (MultiLineComment | EscapeNewLine); + Space = *space_one >> -Comment; SpaceBreak = Space >> Break; White = Space >> *(Break >> Space); EmptyLine = SpaceBreak; @@ -303,7 +304,7 @@ MoonParser::MoonParser() { expr("<<") | expr(">>") | expr("//") | - set("+-*/%^><|&"); + set("+-*/%^><|&~"); BackcallOperator = expr("|>"); @@ -512,16 +513,16 @@ MoonParser::MoonParser() { ); InvokeArgs = - not_(expr('-')) >> Seperator >> + not_(set("-~")) >> Seperator >> ( Exp >> *(sym(',') >> Exp) >> -(invoke_args_with_table | TableBlock) | TableBlock ); const_value = (expr("nil") | expr("true") | expr("false")) >> not_(AlphaNum); - minus_exp = expr('-') >> not_(set(" \t")) >> Exp; + minus_exp = expr('-') >> not_(space_one) >> Exp; sharp_exp = expr('#') >> Exp; - tilde_exp = expr('~') >> Exp; + tilde_exp = expr('~') >> not_(space_one) >> Exp; not_exp = expr("not") >> not_(AlphaNum) >> Exp; unary_exp = minus_exp | sharp_exp | tilde_exp | not_exp; diff --git a/src/MoonP/moon_parser.h b/src/MoonP/moon_parser.h index 00bbcd5..069fdf1 100644 --- a/src/MoonP/moon_parser.h +++ b/src/MoonP/moon_parser.h @@ -112,6 +112,7 @@ private: rule MultiLineComment; rule Indent; rule EscapeNewLine; + rule space_one; rule Space; rule SpaceBreak; rule EmptyLine; -- cgit v1.2.3-55-g6feb