gpt4 book ai didi

parsing - 如何使用 pegjs 语法只解析评论?

转载 作者:行者123 更新时间:2023-12-04 21:58:58 24 4
gpt4 key购买 nike

我写了一个 pegjs 语法,它应该可以解析任何类型的 js/c 风格的注释。但是,它不太有效,因为我只设法捕获了评论本身,而忽略了其他所有内容。我应该如何更改此语法以仅从任何类型的输入中解析注释?

语法:

Start
= Comment

Character
= .

Comment
= MultiLineComment
/ SingleLineComment

LineTerminator
= [\n\r\u2028\u2029]

MultiLineComment
= "/*" (!"*/" Character)* "*/"

MultiLineCommentNoLineTerminator
= "/*" (!("*/" / LineTerminator) Character)* "*/"

SingleLineComment
= "//" (!LineTerminator Character)*

输入:

/**
* Trending Content
* Returns visible videos that have the largest view percentage increase over
* the time period.
*/

Other text here

错误

Line 5, column 4: Expected end of input but "\n" found.

最佳答案

在考虑注释(单行或多行)之前,您需要重构以专门捕获行内容,如:

lines = result:line* {
return result
}

line = WS* line:$( !'//' CHAR )* single_comment ( EOL / EOF ) { // single-comment line
return line.replace(/^\s+|\s+$/g,'')
}
/ WS* line:$( !'/*' CHAR )* multi_comment ( EOL / EOF ) { // mult-comment line
return line.replace(/^\s+|\s+$/g,'')
}
/ WS* line:$CHAR+ ( EOL / EOF ) { // non-blank line
return line.replace(/^\s+|\s+$/g,'')
}
/ WS* EOL { // blank line
return ''
}

single_comment = WS* '//' CHAR* WS*

multi_comment = WS* '/*' ( !'*/' ( CHAR / EOL ) )* '*/' WS*

CHAR = [^\n]
WS = [ \t]
EOF = !.
EOL = '\n'

当针对:

no comment here

single line comment // single-comment HERE

test of multi line comment /*

multi-comment HERE

*/

last line

返回:

[
"no comment here",
"",
"single line comment",
"",
"test of multi line comment",
"",
"last line"
]

关于parsing - 如何使用 pegjs 语法只解析评论?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com