You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@freemarker.apache.org by Jon Revusky <re...@yandex.ru> on 2020/01/05 17:17:45 UTC

[ANN] FreeCC mini-project with $100 payout

As I stated separately in an announcement, the re-activated FreeCC 
project is very much in need of collaborators. Granted, people should be 
interested enough on their own steam, but I have decided to sweeten 
things a bit. I am defining a mini-project that I will pay $100 for. 
Well, the first person who completes it, anyway. Depending on how this 
turns out, I may define some other mini-projects with moderate payouts, 
depending on their complexity. I don't think that this one should be 
more than a day's work. Well, probably considerably less than that. (NB. 
That is $100, the real ones, not Zimbabwe dollars, or even Canadian or 
Australian. Coin of the imperial realm...)

Okay, the project I propose is to write a Java source code to HTML 
utility using FreeCC and FreeMarker. Here is an outline of what needs to 
be done to claim the grand prize. As I stated in the announcement, 
FreeCC contains a Java grammar that is quite usable on its own. The one 
here: https://github.com/revusky/freecc/tree/master/src/grammars

I think that things that are easy should be easy. So I provide the steps 
to get going. Here is the magic incantation to build the parser and 
compile it from any command line (assuming you have git and the JDK 
installed. /Who doesn't?/)

|git clone https://github.com/revusky/freecc.git cd freecc/src/grammars 
../../bin/freecc Java.freecc javac javagrammar/*.java |

The above should generate a Java parser and compile it. The generated 
JavaParser class has a main() method that you can invoke via:

|java javagrammar.JavaParser |You can use that, by the way to run over any Java source file and dump the AST.

Okay, now, there is a wrinkle to this. To work on this mini-project 
actually requires a modification of the above hocus pocus. You see, you 
need to use the FREEMARKER_NODES option when generating the parser. That 
means that the third line of the magic incantation above should be:

|../../bin/freecc -FREEMARKER_NODES Java.freecc |

and the fourth line is also a bit more complicated because you need to 
have freemarker.jar on the classpath. (Do use the one that is included 
with FreeCC, by the way.) So the compile step becomes:

|javac -classpath .:../../bin/freemarker.jar javagrammar/*.java |

(/and the : in the above would be a semicolon ; if you are on a Windows 
machine. (I know I'm spoonfeeding here, but I prefer to err on the side 
of over-specification.../))

You see, what the -FREEMARKER_NODES option did was it told FreeCC to 
generate Node objects that implement the 
freemarker.template.TemplateNodeModel API which allows FreeMarker to 
recursively walk the tree. So, this mini-project, a Java to HTML 
beautifier would require a FreeMarker template that handles the various 
nodes in the Java AST using the recursive tree walking machinery in 
FreeMarker. What is documented here for processing the XML DOM tree: 
https://freemarker.apache.org/docs/xgui_declarative_basics.html

Though that refers specifically to transforming XML, this can also be 
used perfectly well for generating a beautified HTML version of Java 
source code, except that, instead of the nodes being the DOM nodes of an 
XML document, they are the nodes of the AST generated by parsing a Java 
source file. (Pretty cool, eh?) So, what you need is to parse the java 
source file, expose the root node of the AST to your java template and 
marry the two with template.process(...) or something like that.

Okay, so here is how you claim the $100 prize. You get the Java 2 HTML 
utility working as documented above with a reasonably good explanation 
of it that I can include in the examples directory of FreeCC. Your 
authorship will be credited there, and you can provide me an email 
address and I will send you the $100 by Paypal.

This is not the preferred venue for discussing FreeCC development, so 
anybody who wants to follow through on the above mini-project and get 
their $100 and their name in the FreeCC distribution as a contributor, 
please use the discussion forum that was recently set up for this 
purpose. Specifically here: 
https://discuss.parsers.org/t/make-an-easy-100-no-this-is-not-spam/15

Happy New Year,

Jon Revusky

P.S. If you decide to give it a try, you can ask for hints and so on as 
well. I think the trickiest thing might be handling indentation level. 
Well, also, one could get more or less ambitious with the thing. Like, 
somebody who is really a whiz with HTML/javascript could probably 
produce a really nice navigable version of the source code and such. But 
I think I'll accept anything that is colorized and properly indented.


Re: [ANN] FreeCC mini-project with $100 payout

Posted by Jon Revusky <re...@yandex.ru>.
On 05/01/2020 18:17, Jon Revusky wrote:
> As I stated separately in an announcement, the re-activated FreeCC 
> project is very much in need of collaborators. Granted, people should 
> be interested enough on their own steam, but I have decided to sweeten 
> things a bit. I am defining a mini-project that I will pay $100 for. 
> Well, the first person who completes it, anyway. Depending on how this 
> turns out, I may define some other mini-projects with moderate 
> payouts, depending on their complexity. I don't think that this one 
> should be more than a day's work. Well, probably considerably less 
> than that. (NB. That is $100, the real ones, not Zimbabwe dollars, or 
> even Canadian or Australian. Coin of the imperial realm...)
>
> Okay, the project I propose is to write a Java source code to HTML 
> utility using FreeCC and FreeMarker. Here is an outline of what needs 
> to be done to claim the grand prize. As I stated in the announcement, 
> FreeCC contains a Java grammar that is quite usable on its own. The 
> one here: https://github.com/revusky/freecc/tree/master/src/grammars
>
> I think that things that are easy should be easy. So I provide the 
> steps to get going. Here is the magic incantation to build the parser 
> and compile it from any command line (assuming you have git and the 
> JDK installed. /Who doesn't?/)
>
> |git clone https://github.com/revusky/freecc.git cd 
> freecc/src/grammars ../../bin/freecc Java.freecc javac 
> javagrammar/*.java |

Obviously, the above was meant to be 4 separate command lines:

     git clone https://github.com/revusky/freecc.git

     cd freecc/src/grammars

     ../../bin/freecc Java.freecc

     javac javagrammar/*.java


>
> The above should generate a Java parser and compile it. The generated 
> JavaParser class has a main() method that you can invoke via:
>
> |java javagrammar.JavaParser |You can use that, by the way to run over 
> any Java source file and dump the AST.
>
> Okay, now, there is a wrinkle to this. To work on this mini-project 
> actually requires a modification of the above hocus pocus. You see, 
> you need to use the FREEMARKER_NODES option when generating the 
> parser. That means that the third line of the magic incantation above 
> should be:
>
> |../../bin/freecc -FREEMARKER_NODES Java.freecc |

        ../../bin/freecc -FREEMARKER_NODES Java.freecc

>
> and the fourth line is also a bit more complicated because you need to 
> have freemarker.jar on the classpath. (Do use the one that is included 
> with FreeCC, by the way.) So the compile step becomes:
>
> |javac -classpath .:../../bin/freemarker.jar javagrammar/*.java |


    javac -classpath .:../../bin/freemarker.jar javagrammar/*.java


> (/and the : in the above would be a semicolon ; if you are on a 
> Windows machine. (I know I'm spoonfeeding here, but I prefer to err on 
> the side of over-specification.../))


That should be simple enough. Again, if you have any questions, it is 
preferable to ask them on the FreeCC discussion forum. 
https://discuss.parsers.org/t/make-an-easy-100-no-this-is-not-spam/15

JR



>
> Happy New Year,
>
> Jon Revusky
>
> P.S. If you decide to give it a try, you can ask for hints and so on 
> as well. I think the trickiest thing might be handling indentation 
> level. Well, also, one could get more or less ambitious with the 
> thing. Like, somebody who is really a whiz with HTML/javascript could 
> probably produce a really nice navigable version of the source code 
> and such. But I think I'll accept anything that is colorized and 
> properly indented.
>
>