简单的JISON解析器来检测段落

时间:2016-07-11 14:50:07

标签: parsing jison

上帝保佑!!如何编写一个简单的jison语法,用于识别带有段落的文档???我正在使用以下语法:

%lex
%%
(\r?\n)+\s*                 return 'NL'
[^\S\r\n]+                  return 'SPACE'
.                           return 'CHAR'
<<EOF>>                     return 'NL'
/lex

%s document

%%
document    : paragraphs                { console.log($1); return $1; }
            ;

paragraphs : paragraph                  { $$ = [$1] }
           | paragraphs paragraph       { $$ = $1.concat($2) }
           ;

paragraph  : NL
           | text NL                    { $$ = $1 }
           ;

text        : string                    { $$ = [$1] }
            | text SPACE string         { $$ = $1.concat($3) }
            ;

string      : CHAR
            | string CHAR               { $$ = $1 + $2 }
            ;

对于我正在使用的测试:

Hello world
Monkey beast
Hi

我想要的是,我的语法可以看出,一个段落成了一系列词语。

在JISON网站上试试这件事,让我一直在给予:

[["Hello","world"],"Monkey","beast","Hi"]

而我所期待的是

[["Hello","world"],["Monkey","beast"],["Hi"]]

任何人都可以帮助我????

1 个答案:

答案 0 :(得分:0)

没关系!!问题出在我身上,但供将来参考:只需替换:

| paragraphs paragraph       { $$ = $1.concat($2) }

通过

| paragraphs paragraph       { $$ = $1.concat([$2]) }

:)

干杯!