From 2e9e28ceb3444e0aaf0ff7c704800b9cdc25dc87 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 20 Feb 2020 15:59:22 +0800 Subject: fix comments issue. --- spec/inputs/whitespace.moon | 29 +++++++++++++++-------------- src/MoonP/moon_parser.cpp | 8 ++++---- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/spec/inputs/whitespace.moon b/spec/inputs/whitespace.moon index 06b8773..06ce4eb 100644 --- a/spec/inputs/whitespace.moon +++ b/spec/inputs/whitespace.moon @@ -100,36 +100,37 @@ c(one, two, -- v = -> - a, - b, - c + a, -- v1 + b, -- v2 + c -- v3 v1, v2, v3 = -> - a; - b, - c + a; -- end of function for v1 + b, -- v2 + c -- v3 a, b, c, d, e, f = 1, f2 - :abc; + :abc; -- arg2 3, 4, - f5 abc; + f5 abc; -- arg5 6 -for a, - b, - c in pairs tb +for a, -- destruct 1 + b, -- destruct 2 + --[[destruct 3]] c + in pairs tb print a, b, c -for i = 1, - 10, - -1 +for i = 1, -- initial + 10, -- stop + -1 -- step print i local a, diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp index 8d7fdc5..39551d2 100644 --- a/src/MoonP/moon_parser.cpp +++ b/src/MoonP/moon_parser.cpp @@ -36,7 +36,6 @@ MoonParser::MoonParser() { plain_space = *set(" \t"); Break = nl(-expr('\r') >> '\n'); Any = Break | any(); - White = *(set(" \t") | Break); Stop = Break | eof(); Indent = plain_space; Comment = "--" >> *(not_(set("\r\n")) >> Any) >> and_(Stop); @@ -45,8 +44,9 @@ 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") | MultiLineComment | EscapeNewLine) >> -Comment; + Space = *(set(" \t") | and_(set("-\\")) >> (MultiLineComment | EscapeNewLine)) >> -Comment; SpaceBreak = Space >> Break; + White = Space >> *(Break >> Space); EmptyLine = SpaceBreak; AlphaNum = range('a', 'z') | range('A', 'Z') | range('0', '9') | '_'; Name = (range('a', 'z') | range('A', 'Z') | '_') >> *AlphaNum; @@ -207,7 +207,7 @@ MoonParser::MoonParser() { for_in = star_exp | ExpList; - ForEach = key("for") >> AssignableNameList >> key("in") >> + ForEach = key("for") >> AssignableNameList >> White >> key("in") >> DisableDo >> ensure(for_in, PopDo) >> -key("do") >> Body; @@ -233,7 +233,7 @@ MoonParser::MoonParser() { Comprehension = sym('[') >> Exp >> CompInner >> sym(']'); comp_value = sym(',') >> Exp; - TblComprehension = sym('{') >> (Exp >> -comp_value) >> CompInner >> sym('}'); + TblComprehension = sym('{') >> Exp >> -comp_value >> CompInner >> sym('}'); CompInner = Seperator >> (CompForEach | CompFor) >> *CompClause; star_exp = sym('*') >> Exp; -- cgit v1.2.3-55-g6feb