How to Parse SAS Code
This is the most basic of examples: it shows how to parse some SAS code.
Add Dependencies
- Kotlin
- Java
repositories {
mavenLocal()
mavenCentral()
flatDir {
dirs("deps")
}
}
dependencies {
implementation(files("deps/sas-parser-with-dependencies-1.6.5-all.jar"))
}
repositories {
mavenLocal()
mavenCentral()
flatDir {
dirs("deps")
}
}
dependencies {
implementation(files("deps/sas-parser-with-dependencies-1.6.5-all.jar"))
implementation "com.strumenta.kolasu:kolasu-javalib:1.5.96"
}
Parse a file
This code shows how to create a SAS parser object and use it parse a file. It expects in input two File(s): a file containing the SAS code and another one the license.
- Kotlin
- Java
private fun processSASFile(sasFile: File, license: File) {
println("== Processing SAS file " + sasFile.getPath() + " ==\n")
if (!sasFile.exists() && !sasFile.isFile()) {
println("File not found or not a file, skipping")
return
}
// register license
LicenseManager.registerLicense(license)
// create parser
val sasLanguage = SASLanguage()
// set to automatically parse SQL code
sasLanguage.parseNativeSQL = true
val result = sasLanguage.parse(sasFile)
if (!result.issues.isEmpty()) {
println("Issues in file: " + result.issues.size)
for (issue in result.issues) {
println(" - " + issue)
}
}
if (result.root == null) {
println("Compilation unit not built, skipping")
return
}
val sf: SourceFile = result.root!!
if (sf.getStatementsAndDeclarations().isEmpty()) {
println("No statements")
} else {
println(
"Number of statements and declarations: " + sf.getStatementsAndDeclarations().size()
)
}
}
private static void processSASFile(File sasFile, File license) {
System.out.println("== Processing SAS file " + sasFile.getPath() + " ==\n");
if (!sasFile.exists() && !sasFile.isFile()) {
System.out.println("File not found or not a file, skipping");
return;
}
// register license
com.strumenta.kolasu.commercial.LicenseManager.INSTANCE.registerLicense(license);
// create parser
SASLanguage sasLanguage = new SASLanguage();
// set to automatically parse SQL code
sasLanguage.setParseNativeSQL(true);
ParsingResult<SourceFile> result = sasLanguage.parse(sasFile);
if (!result.getIssues().isEmpty()) {
System.out.println("Issues in file: " + result.getIssues().size());
for (Issue issue: result.getIssues()) {
System.out.println(" - " + issue);
}
}
if (result.getRoot() == null) {
System.out.println("Compilation unit not built, skipping");
return;
}
SourceFile sf = result.getRoot();
if (sf.getStatementsAndDeclarations().isEmpty()) {
System.out.println("No statements");
} else {
System.out.println(
"Number of statements and declarations: " + sf.getStatementsAndDeclarations().size()
);
}
}
You can use the method we just created very easily.
- Kotlin
- Java
fun main() {
processSASFile(File("examples/SAS/all-the-code.sas"), File("licenses/strumenta.SAS.license"))
}
public static void main(String[] args) {
processSASFile(new File("examples/SAS/all-the-code.sas"), new File("licenses/strumenta.SAS.license"));
}