Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a program which can help understand another program?

I need to document the software I'm currently working on. The software consists of several programming languages and scripts which got me thinking. If a new developers comes along and needs to fix something, they might know Java but maybe not bash scripting. It would be nice if there was a program which would help to understand what

for f in "$@" ; do

means. I was thinking of something that creates a static HTML page with the code plus syntax highlighting and if you hover over something (like the "for"), it would display a pop-up with an explanation:

for starts a loop which iterates over all values that follow in. In the loop, you can access each value via the variable $f. The loop body is between do and done

Does something like that already exist?

[EDIT] This is just an example. You'll get another help for f, in, "$@", ; and do, i.e. each and every element of the line should be explained. Unknown elements (like command names) should link to Google. So you can understand what it does even if you're missing some detail.

[EDIT2] I'm aware that you can't write a program which understands what another program does. What I'm looking for is a simple tool which will do "extended syntax highlighting" in the sense that it will color an expression and give a short explanation what it means (plus maybe a link to some in-depth reference).

This is meant for someone who knows how to program but maybe hasn't seen some obscure construct before. Say

echo "Error" 1>&2

Every bash programmer knows what this means but a Java developer might be puzzled by the 1>&2 despite the fact that they can guess that echo == System.out.println. A simple "Redirects stdout to stderr" will clear things up and give that instant "AHA!" which allows them to stay in their current train of thought.

like image 734
Aaron Digulla Avatar asked Mar 10 '10 08:03

Aaron Digulla


People also ask

What is used for the computer to understand a program?

Machine language is the language understood by a computer. It is very difficult to understand, but it is the only thing that the computer can work with. All programs and programming languages eventually generate or run programs in machine language.

How do you read and understand someone else's code?

This 4 step process is simple and will save you a lot of time and effort; all you need to do is: Run the code and explore the results. Find the main function or the start point of the code. Run the code under the debugger and fully understand the code's mechanics.


2 Answers

A tool like this could be built using ANTLR, i.e. parse the code into an abstract syntax tree using an ANTLR grammar for that language, and write an HTML generator which produced the annotated code.

It sounds like a useful tool to have for language learning, or exploring source code of projects you're not maintaining -- but is it appropriate for documentation?

Why is it important to help the programmers of other languages understand the code at this level of implementation detail? Anyone maintaining the implementation at this level will obviously have to know the language and will probably have an IDE to do most of this.

That said, I'd definitely consider a tool like this as a learning aid.

like image 194
mattbh Avatar answered Oct 24 '22 07:10

mattbh


IMO it would be simpler and more effective to just collect links to good language-specific references and tutorials on a Wiki page.

For all mainstream languages, such sources exist and are maintained regularly. If you try to create your own reference, you need to maintain it too. Fair enough, bash syntax is not going to change very often, but other languages do develop faster, so it is going to be a burden.

like image 37
Péter Török Avatar answered Oct 24 '22 09:10

Péter Török