Извлечение определений переменных и ссылок на переменные из программы 'C' - PullRequest
0 голосов
/ 16 апреля 2011

Мне был назначен странный проект в колледже. Меня попросили извлечь определения переменных и ссылки из заданной входной программы "C".

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

Рассмотрим следующую программу.

1 int main()  
2 {  
3 int a,b,c;  
4 printf("Enter the values of a and b\n");  
5 scanf("%d%d",&a,&b);  
6 c=a+b;  
7 printf("The sum of two numbers is %d",c);  
8 }  

И вход для программы, которую я разрабатываю, - это программа 'C', в которой одна строка состоит из одного оператора. то есть мы знаем, что всю программу можно записать в одну строку. Но не в моем случае, то есть, когда есть окончание (точка с запятой), строки, следующие за точкой с запятой, сдвигаются к следующей строке.

В любом случае, моя работа заключается в извлечении определений / объявлений переменных и использования / ссылок на переменные в заданной программе ввода C ..

Рассмотрите вышеупомянутую программу, В строке № 3 объявляются переменные a, b и c, следовательно, они должны быть напечатаны в столбце «Definition» выходных данных.

Аналогично в операторе 5 значения a и b инициализируются с помощью оператора scanf, поэтому переменные a и b должны быть напечатаны в столбце определения выходных данных.

Теперь рассмотрим утверждение 6. Значение переменной c инициализируется / определяется, следовательно, c должно быть напечатано под столбцом определения. В то же время значения a и b используются для определения значения c, следовательно, переменные a и b должны быть напечатаны в столбце «reference» выходных данных.

И, наконец, значение переменной c указывается / используется в операторе 7, поэтому переменная c должна быть напечатана в столбце, на который имеется ссылка.

Пример вывода программы показан ниже ..

Line Number          Defined Variable        Referenced Variable
_____________________________________________________________________
  1                       --                           --
  2                       --                           --
  3                     a,b,c                         --
  4                       --                           --
  5                      a,b                          --
  6                       c                           a,b
  7                       --                          c
  8                       --                          --

Может кто-нибудь сказать мне, как решить проблему ???? Помните, мне нужно написать программу на C / C ++ или даже сценарий оболочки разрешен для проекта. Мне нужно учитывать математические выражения, логические выражения, вызовы встроенных функций, вызовы пользовательских функций и определения функций ..

Заранее спасибо ..

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Вам нужно начать с полноценного синтаксического анализатора Си.Вы можете написать это самостоятельно, но вам, вероятно, лучше использовать что-то уже существующее, например, CLang .

1 голос
/ 16 апреля 2011

Стандартным способом было бы написать токенизатор и парсер для частичной компиляции входной программы.Тогда вы будете знать, какие выражения находятся в каждой строке.Для целей данного назначения вы можете просто сопоставить регулярные выражения до:

  1. определение переменной
  2. ссылка на переменную

и выплевывать записи длякаждая строка.Так, например, ссылка на переменную может быть чем-то вроде «допустимого идентификатора C в любом месте, кроме после допустимого типа данных C».Захваты здесь будут «действительным идентификатором C», поэтому просто распечатайте их в столбце «Ссылочная переменная».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...