SAS Parser

This is a parser for the SAS language. It is intended to be used mainly as a JVM library. It can also be used as a command line tool.

The parser works in three different stages:

  • First a list of tokens are created from some input stream (typically a File)
  • Then a parse-tree is obtained by grouping the tokens and recognizing structures
  • Finally an Abstract Syntax Tree (AST) is derived from the parse-tree. While the AST resembles closely the parse-tree it contains re-arrangements and simplifications that makes easier working with it.

The AST is built using the Kolasu library. This open-source library has been built by Strumenta. This tutorial on Kolasu explains how the library can be used: Building advanced parsers using Kolasu.

The AST could be used to perform analysis on the code or transformations of the code.

An example of transformations that can be created is transpilation.

Contents of the package

  • Full JAR file with all dependencies
  • Windows e Linux scripts to execute the JAR
  • Documentation in HTML format

How to use the parser

You can use the parser as a library (i.e., from code) or as a standalone program, from the command line.

How to use from the command line

You can use the full JAR from the commandline. Executing the program without commands will display the help information.

java -jar sas-parser-with-dependencies-<version>-all.jar
```

The main commands are `parse` and `jsonast`. The first one will parse an input file and output the AST on stdout. The second one will parse an input file (or directory) and output JSON files.

#### How to generate parsing results on stdout

The `parse` command requires to provide the path to a valid license with the `--license` option. The argument is the input file.

```
java -jar sas-parser-with-dependencies-<version>-all.jar parse --license=strumenta.license examples.sas 
```

#### How to generate parsing results as JSON

The `jsonast` command requires to provide the path to a valid license with the `--license` option. The first argument is the input (file or directory). The second argument is the output directory where to save the JSON files.

```
java -jar sas-parser-with-dependencies-<version>-all.jar jsonAst --license=strumenta.license examples.sas .\ 
```

#### How to download an updated license

You can use `downloadLicense` command to download an updated license from the license service. The license will expire around 31 days from the moment of execution. The exact date will vary because of timezone discrepancies between the server and the local timezone. 
You need to provide a username and password and the path where to save the license.

```
java -jar sas-parser-with-dependencies-<version>-all.jar downloadLicense username password sesameholder.license 
```

If you are successful in downloading the license, you will see something similar to this output.

```
License successfully downloaded at sesameholder.license
StartDate: Mon Nov 04 01:00:00 CET 2024
EndDate: Sat Dec 07 01:00:00 CET 2024
```

### How to use as a library

You can use this parser as any other library, directly from your code.

#### Using a license

This parser requires a license to be used.
You can use the static method `registerLicense` to register the license by providing the license file as argument.
You need to register the license once in the program.

```Java
import com.strumenta.sas.parser.SASLanguage;
[..]
SASLanguage.Companion.registerLicense(new File("data/example.license"));
```

You can then instantiate the parser to parse your SAS code (either as a string or as a file).

```Java
SASLanguage sasLanguage = new SASLanguage();
sasLanguage.parse(input);
```

#### Download a license

You can also download an updated license using the method download license in the LicenseValidation class.

```Java
LicenseValidation lv = new LicenseValidation();
lv.downloadLicense("user", "pass", "location.license");
```