summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2016-04-30 00:11:42 +0200
committerPeter Wu <peter@lekensteyn.nl>2016-04-30 00:11:42 +0200
commit5302f28e95e32f1458e6e18844f963ccaa2120fe (patch)
treef0ffeff47e922e62f3c297b9a26e633e3f9b05d5 /src
parent58ee6d89a6191d6ccae0d4394ca10a7f9c4deebd (diff)
downloadRegexTest-5302f28e95e32f1458e6e18844f963ccaa2120fe.tar.gz
Add Java comments check
Diffstat (limited to 'src')
-rw-r--r--src/regex/RegexTest.java64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/regex/RegexTest.java b/src/regex/RegexTest.java
index fff0796..8345965 100644
--- a/src/regex/RegexTest.java
+++ b/src/regex/RegexTest.java
@@ -180,6 +180,69 @@ public class RegexTest {
reMatlabComment.assertFail("%{\n%}x");
reMatlabComment.assertFail("%{ \nx %}");
reMatlabComment.assertFail("%{\n%}%}");
+ System.out.println();
+ }
+
+ static void checkJavaComment() {
+ /* CR ::= #0a
+ * LF ::= #0d
+ * InputCharacter ::= Char - CR - LF
+ * LineTerminator ::= LF | CR | CR LF
+ * NotStar ::= InputCharacter - "*" | LineTerminator
+ * NotStarSlash ::= InputCharacter - "*" - "/" | LineTerminator
+ *
+ * TraditionalComment ::= "/" "*" CommentTail
+ * CommentTail ::= "*" CommentTailStar | NotStar CommentTail
+ * CommentTailStar ::= "/" | "*" CommentTailStar
+ * CommentTailStar ::= NotStarSlash CommentTail
+ * EndOfLineComment ::= "/" "/" InputCharacter*
+ * Comment ::= TraditionalComment | EndOfLineComment
+ *
+ * Note: while the Java Language Specification dictates that
+ * UnicodeEscape tokens are recognized, here it is assumed that this
+ * step is already handled. If not, then all "/", "*", newlines and Char
+ * tokens should be either its respective literal or the UnicodeEscape
+ * that represents this literal.
+ *
+ * https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.7
+ */
+ String sl = "//[^\n\r]*";
+ // Match parts starting with a star, followed by CommentTailStar, but
+ // only where CommentTailStar = "*" CommentTailStar, terminated by
+ // NotStarSlash [CommentTail]. There is a special case in the "ml"
+ // regex for when CommentTailStar does not contain NotStarSlash.
+ String star = "\\*+[^/*]";
+ String nostar = "[^\\*]";
+ String ml = "/\\*" + "(" + star + "|" + nostar + ")*\\**" + "\\*/";
+ RegexTest reJavaComment = new RegexTest(sl + "|" + ml);
+
+ // Single-line comment
+ reJavaComment.assertOk("//");
+ reJavaComment.assertOk("// ok");
+ reJavaComment.assertOk("/// ok//");
+ reJavaComment.assertFail("//\n");
+ reJavaComment.assertFail("//\n//");
+
+ // Multi-line comments
+ reJavaComment.assertOk("/**/");
+ reJavaComment.assertOk("/***/");
+ reJavaComment.assertOk("/* xxx */");
+ reJavaComment.assertOk("/*\n*/");
+ reJavaComment.assertOk("/*\r\n*/");
+ reJavaComment.assertOk("/*/*/");
+ reJavaComment.assertOk("/*//*/");
+ reJavaComment.assertOk("/*///*/");
+ reJavaComment.assertOk("/** */");
+ reJavaComment.assertOk("/** /*/");
+ reJavaComment.assertOk("/*xxx\n*/");
+ reJavaComment.assertOk("/*\nxxx*/");
+ reJavaComment.assertOk("/*\nxxx\n*/");
+ reJavaComment.assertOk("/*\nxx\nx\n*/");
+ reJavaComment.assertFail("/**/ x");
+ reJavaComment.assertFail("/**///");
+ reJavaComment.assertFail("/**//*/");
+ reJavaComment.assertFail("/**//**/");
+ System.out.println();
}
public static void main(String[] args) {
@@ -188,6 +251,7 @@ public class RegexTest {
checkFLOAT();
checkString();
checkMatlabComment();
+ checkJavaComment();
System.out.println("Passed.");
}
}