Imtiaz Atik 181-15-949 Ответов: 5

Как обнаружить и распечатать строку комментария из исходного кода?


Необходимо использовать язык Си и файловую систему. Работайте как лексический анализатор. Узнайте общую строку комментария из исходного кода, который я введу.

Что я уже пробовал:

Я не могу понять, с чего начать...

5 Ответов

Рейтинг:
2

CPallini

Это хороший повод узнать, как работает конечный автомат.
Попробуйте, например, следующий код.
Он ожидает своего вклада (C исходный код только оригинальной C-стиль (/*...*/) стиль комментариев) форма stdin (консоль), так что перенаправление (с помощью <) этот C исходный файл должен быть обработан соответствующим образом).

#include <stdio.h>


/* The states defining the state machine */
typedef enum
{
  Idle, /* outside a comment */
  WaitForStar, /* outside a comment, but a '/' has been just processed */
  InComment, /* inside a comment */
  WaitForSlash, /* inside a comment, but a '*' as been just processed */
} State;

/* the state machine implementation */
State process_idle(int );
State process_wait_for_star(int );
State process_in_comment(int );
State process_wait_for_slash(int );

int main()
{
  State state = Idle;
  int i;

  while ( (i = fgetc(stdin)) != EOF )
  {
    switch (state)
    {
    case Idle:
      state = process_idle(i);
      break;
    case WaitForStar:
      state = process_wait_for_star(i);
      break;
    case InComment:
      state = process_in_comment(i);
      break;
    case WaitForSlash:
      state = process_wait_for_slash(i);
      break;
    }
  }

  return 0;
}

State process_idle(int i)
{
  if ( i == '/') return WaitForStar;
  return Idle;
}

State process_wait_for_star(int i)
{
  if ( i == '*' ) return InComment;
  if ( i == '/' ) return WaitForStar;
  return Idle;
}

State process_in_comment(int i)
{
  if ( i == '*') return WaitForSlash;
  putchar(i);
  return InComment;
}

State process_wait_for_slash(int i)
{
  if (i == '/')
  {
    putchar('\n');
    return Idle;
  }
  if (i == '*')
  {
    putchar('*');
    return WaitForSlash;
  }
  putchar('*'); putchar(i);
  return InComment;
}


Рейтинг:
2

OriginalGriff

Цитата:
Как искать их из файла с коротким кодом, пожалуйста.


Мы здесь не для того, чтобы делать за вас домашнее задание: мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь для того, чтобы делать все это за вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.


Рейтинг:
1

Richard MacCutchan

Начать здесь: c file io - поиск в Google[^]


Рейтинг:
0

k5054

Строго говоря комментарии C начинаются с /* и закончим на этом */ Все, что вам нужно сделать, это:

Open the input file
search for the first /*
output text until you find a */
repeat until end of file

Я оставлю всю тяжелую работу на вас.
Многие компиляторы C также принимают // как начало комментария, который простирается до конца текущей строки, так и вы можете захотеть или нуждаться в том, чтобы найти эти комментарии тоже.


Imtiaz Atik 181-15-949

Как искать их из файла с коротким кодом, пожалуйста.

Рейтинг:
0

OriginalGriff

Зависит от языка, который вы обрабатываете: комментарии бывают разных форм, в зависимости от языка, на котором они используются:

//  Single line comment, ends at newline: "modern" C, C++, C#, Java, ...
/* Multiline comment, ends at */ : all C, C++, etc.
' Single line comment, ends at newline: VB
# Single line comment: PHP, Python
C (in column 1): Early Fortran
REM Single line comment, Basic
:: Batch files
; Most assembly languages
-- SQL
*> Cobol

Вероятно, есть множество других, но это те, которые я использовал!

Поэтому решите, что представляет собой индикатор комментариев, и проанализируйте каждую строку, чтобы найти их.


Imtiaz Atik 181-15-949

Мне это нужно для языка c пожалуйста дайте мне подсказку код в c с помощью файла methos

OriginalGriff

А что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?