It should also run using cygwin.
What yuo can do is directly edit the arq.jj file (its the intermediate
output of the process and is the javacc file), and run javacc yourself
as given in the "grammar" script.
javacc -OUTPUT_DIRECTORY=$DIR -JDK_VERSION=1.7 "${FILE}"
The setting of $DIR is a couple line above that.
javacc is used in quite a siple fashion to build the parse tree, and no
more. After that, you are into the realm of the SPARQL algebra (see the
SPARQL 1.1 spec) and OpExecutor1 which executes the algebra.
Andy
On 07/02/18 10:51, Rob Vesse wrote:
You run the grammar script directly at a shell prompt, this requires a *nix OS,
it is not supported under Windows i.e.
./grammar
It then automatically applies the C pre-processor to the master.jj file to
generate the other .jj files and then calls javacc over those to generate the
Java parsers. I would suggest reading the script in the text editor of your
choice to see what it is doing. You'll need both cpp and javacc present on your
PATH for this to work.
Note that USING is already a keyword in SPARQL Update which is part of the
combined SPARQL 1.1 grammar so I would suggest that you avoid overloading
existing keywords!
Rob
On 07/02/2018, 10:34, "Berkin Özdemir Bengisu"
<[email protected]> wrote:
Thanks a lot for all the help! I am considering adding some decision
keywords such as USING or BASED ON, then define my functions according to
the tokens after those keywords.
Could you please explain the "preprocessing the master.jj using grammar
script" part a bit more detailed? I was unable to run the grammar script
to create the other jj files. The basic cpp run over grammar fails since
the file doesn't have any extension.
Many Thanks
2018-02-06 11:53 GMT+02:00 Rob Vesse <[email protected]>:
> This is entirely possible but it is not at all trivial. We have been doing
> this for several years to add several extensions to the language. The
> extent of the necessary changes Will vary depending on what your
extensions
> are intended to do.
>
> To start with the grammar. You can find the input files in a Grammer/
> sub-directory within the ARQ module. master.jj is the main file and
uses C
> style #ifdef to add/remove language features depending on the Target
> language. So the best approach is to modify master.jj and insert your own
> #ifdef sections with your grammar rules.
>
> The grammar script pre-processes this file into the other *.jj files as
> #ifdef's are not valid in JavaCC inputs. You will need to modify the
script
> to be able to generate your newly defined grammar.
>
> What else you need to do will depend on the language features you are
> creating. If all the keywords you introduce are shorthand for existing
> language features then the grammar is the main piece you need.
>
> However in order for your new parser to be used you will need to register
> it as a language. Doing this requires you to implement the
> SPARQLParserFactory interface which has
> an accept(Syntax) and a create(Syntax) method. The former indicates
> whether your factory can parse a given syntax and the latter creates a
> parser for your language from which you can simply return the JavaCC
> generated SPARQLParserYourLang class. You'll probably want to define your
> own Syntax Constant so that you can create queries in your language by
> calling QueryFactory.create(query, YourSyntax), note that you will need
to
> call SPARQLParserRegistry.addFactory(YourSyntax, YourParserFactory) for
> this to work.
>
> If your language extensions require new operators then you have
> significantly more work on your hands. I can go into everything required
> for that as well if desired in a future email?
>
> Another thing to consider is whether you want queries using your new
> language features to round trip i.e. string -> parsed query -> string?
This
> can also require quite a bit of work depending upon how invasive your
> language features are. Again probably a separate email.
>
> Good luck, please send further questions to the list as you have them and
> we will do our best to answer them
>
> Rob
>
> On 05/02/2018, 20:42, "Berkin Özdemir Bengisu" <
> [email protected]> wrote:
>
> Hello,
>
> I am using jena 3.6.0 and I would like to extend the sparql 1.1
grammar
> with some new keywords. Could you please help me what would be the
> best way
> to start with?
>
> - As I understood, the grammar is generated by javaCC but I was
unable
> to
> find any documentation or any main classes that actually generate the
> grammar. Are grammar classes generated as an out source and then
added
> to
> the project?
>
> I would be really glad if you could guide me on this.
>
> Best
> Berkin
>
>
>
>
>
>