我必须创建一个程序来计算忽略注释内部代码的代码行。我是一个与Antlr一起工作的新手,在经过多次努力之后,最接近解决的是这个错误的语法:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width / 2, height: 100)
}
如果我尝试使用grammar Comments;
comment : startc content endc;
startc : '/*';
endc : '*/';
content : newline | contenttext;
contenttext : CONTENTCHARS+;
newline : '\r\n';
CONTENTCHARS
: ~'*' '/'
| ~'/' .
;
WS : [ \r\t]+ -> skip;
,解析器会识别出这一点,这是错误的:
为了计算行数,解析器需要检测多行注释内外的换行符。我认为我的问题是,我不知道怎么说"匹配/*hello\r\nworld*/
和/*
中的所有内容,除了 */
。
拜托,你能指出我正确的方向吗?任何帮助将不胜感激。
答案 0 :(得分:1)
让我们简化你的语法!在语法中,我们将忽略词法分析器阶段的空白字符和注释(同时不需要的换行符!)。例如,COMMENT
部分将匹配一行注释或多行注释,只是跳过它们!
接下来,我们将介绍counter
变量,用于计算仅在NEWLINE
语法规则中使用的content
令牌(因为COMMENT
令牌被跳过,因此{{1} }令牌!)。
每当我们遇到NEWLINE
令牌时,我们会增加NEWLINE
变量。
counter