Check Whether a String is a Valid Comment or Not?

  • Aim

    To design an online simulator that checks whether a given input string (program snippet) is a single/multi-comment or not a comment.

  • Programming Languages Used

    • HTML
    • CSS
    • JavaScript
  • Theory

    Given a string as user input, representing a program snippet, the task is to check if the given string is a single/multi-line comment or not a comment. Types of comments in programs:

    • Single Line Comment: Comments preceded by a Double Slash ('//')
    • Multi-line Comment: Comments starting with ('/*') and ending with ('*/')
  • Program Logic

    Check if at the first Index(i.e. index 0) the value is '/' then follow below steps else print "It is not a comment".

    • If line[0] == '/':
      • If line[1] == '/', then print "It is a single line comment".
      • If line[1] == '*', then traverse the string and if any adjacent pair of '*' & '/' is found then print "It is a multi-line comment".
    • Otherwise, print "It is not a comment".
  • Input Output Examples

    • Input: line = "/* Comment */"

      Output: It is a multi-line comment

    • Input: line = "//Comment"

      Output: It is a single-line comment

    • Input: line = "Comment"

      Output: It is not a comment

  • C Code

    Go to this Repo to get the code.

  • Online Simulator

    Click on this Link to go to the simulator.

  • Time and Space Complexity

    • Time Complexity: O(n)

    • Space Complexity: O(1)

  • Discussion

    We wrote the online simulator using C programming language and integrated it with the website designed using HTML, CSS, JavaScript. The simulator takes a string as user input and checks whether it is a single/multi-line comment or not a comment.

  • Sources of Error

    There can be two possible sources of error for this string in the program snippet:

    • Unterminated Multi-Line Comments:

      It occurs when we do not terminate the comment with a valid set of characters (here the red-coloured */). Single line comment does not need to terminate, and it starts by a double slash (//), but, multi-line comment needs to be terminated by */ (asterisk and slash). If a multi-line comment is not terminated properly, then during lexical analysis phase of the compiler, the compiler will consider everything after start of the multi-line comment as a comment and ignore them during tokenization (traversing the program from left to right line-by-line and breaking them down into tokens or logical units of a program).

    • Nested Multi-Line Comments:

      In C, multi-line comments, /* and */, do not nest ie, if we want to write a nested comment (comment within comment), the compiler during lexical analysis phase will consider the first /* as start of multi-line comment and ignore the second /* syntax as it has still not got an end for the first comment “*/”. So, the multi-line comment will end after the first */ (red coloured). After that, the rest of the comment will not be ignored and will be considered during tokenization until it again gets a start of comment line again.