aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-01-29 23:01:16 -0600
committerIan Hinder <ian.hinder@aei.mpg.de>2012-01-29 23:01:16 -0600
commit7c967ee25f2a2fb814dd07acccf38ecccd052c6d (patch)
tree6f053f4a7f23025946b376ca213216447cf81b33 /Tools
parent84f1b6ad6bd053a593a087f551ced3c15ad1d933 (diff)
Move Piraha interface into separate source file
Diffstat (limited to 'Tools')
-rw-r--r--Tools/CodeGen/KrancScript.m39
-rw-r--r--Tools/MathematicaMisc/RunKranc.m3
-rw-r--r--Tools/PirahaPeg/Piraha.m71
3 files changed, 75 insertions, 38 deletions
diff --git a/Tools/CodeGen/KrancScript.m b/Tools/CodeGen/KrancScript.m
index e14a2d4..d73a72c 100644
--- a/Tools/CodeGen/KrancScript.m
+++ b/Tools/CodeGen/KrancScript.m
@@ -19,47 +19,12 @@
*)
BeginPackage["KrancScript`", {"Errors`", "Helpers`", "Kranc`", "JLink`", "TensorTools`",
- "KrancTensor`"}];
+ "KrancTensor`", "Piraha`"}];
CreateThornFromKrancScript;
Begin["`Private`"];
-InstallJava[];
-
-(* The JRE does not share a current directory with the Mathematica
- kernel, so relative paths have to be converted to absolute paths.
- It is not possible to change the JRE working directory. *)
-
-absPath[s_String] :=
- If[StringTake[s,1] === $PathnameSeparator, s, FileNameJoin[{Directory[],s}]];
-
-fullKrancDir = absPath[KrancDirectory];
-
-AddToClassPath[
- FileNameJoin[{fullKrancDir, "Tools","PirahaPEG","piraha.jar"}]];
-
-DefFn[
- parseScript[filename_String] :=
- Module[
- {g,m,c,sw,dout,xmlString,xml},
- g = JavaNew["edu.lsu.cct.piraha.Grammar"];
- g@compileFile[JavaNew["java.io.File", FileNameJoin[{fullKrancDir, "Auxiliary", "Grammars","kranc2.peg"}]]];
-
- c = Grammar`readContents[JavaNew["java.io.File", absPath@filename]];
-
- m = g@matcher["thorn", c];
-
- If[!m@match[0], ThrowError["Failed to parse input file: ",m@near[]@toString[]]];
-
- sw = JavaNew["java.io.StringWriter"];
- dout = JavaNew["edu.lsu.cct.piraha.DebugOutput", JavaNew["java.io.PrintWriter", sw]];
- m@dumpMatchesXML[dout];
- dout@flush[];
- xmlString = sw@toString[];
- xml = ImportString[xmlString, "XML"];
- xml]];
-
DefFn[
CreateThornFromKrancScript[filename_String] :=
Module[
@@ -67,7 +32,7 @@ DefFn[
Print["Creating thorn from ",filename];
- code = parseScript[filename];
+ code = Parse["kranc2.peg", "thorn", filename];
code = code /. ("startIndex" -> _) :> Sequence[];
code = code /. ("endIndex" -> _) :> Sequence[];
diff --git a/Tools/MathematicaMisc/RunKranc.m b/Tools/MathematicaMisc/RunKranc.m
index 00f7bc9..3272c2e 100644
--- a/Tools/MathematicaMisc/RunKranc.m
+++ b/Tools/MathematicaMisc/RunKranc.m
@@ -4,7 +4,8 @@ Kranc`KrancDirectory = Environment["KRANCDIR"];
$Path = Join[$Path,
{Kranc`KrancDirectory <> "/Tools/CodeGen",
- Kranc`KrancDirectory <> "/Tools/MathematicaMisc"}];
+ Kranc`KrancDirectory <> "/Tools/MathematicaMisc",
+ Kranc`KrancDirectory <> "/Tools/PirahaPeg"}];
Needs["Errors`"];
Needs["KrancThorn`"];
Needs["Profile`"];
diff --git a/Tools/PirahaPeg/Piraha.m b/Tools/PirahaPeg/Piraha.m
new file mode 100644
index 0000000..695fcb5
--- /dev/null
+++ b/Tools/PirahaPeg/Piraha.m
@@ -0,0 +1,71 @@
+
+(* Copyright 2012 Ian Hinder
+
+ This file is part of Kranc.
+
+ Kranc is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Kranc is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Kranc; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*)
+
+BeginPackage["Piraha`", {"Errors`", "Helpers`", "JLink`", "Kranc`"}];
+
+Parse::usage = "Parse[grammarfile, pattern, inputfile] parses a file named inputfile using a grammar stored in a file named grammarfile using pattern as the root pattern. The parse tree is returned as Symbolic XML.";
+
+Begin["`Private`"];
+
+InstallJava[];
+
+(* The JRE does not share a current directory with the Mathematica
+ kernel, so relative paths have to be converted to absolute paths.
+ It is not possible to change the JRE working directory. *)
+
+absPath[s_String] :=
+ If[StringTake[s,1] === $PathnameSeparator, s, FileNameJoin[{Directory[],s}]];
+
+fullKrancDir = absPath[KrancDirectory];
+
+AddToClassPath[
+ FileNameJoin[{fullKrancDir, "Tools","PirahaPEG","piraha.jar"}]];
+
+DefFn[
+ Parse[grammarFileName_String, pattern_String, inputFileName_String] :=
+ Module[
+ {gf,g,m,c,sw,dout,xmlString,xml},
+
+ If[FileExistsQ[grammarFileName],
+ gf = grammarFileName,
+ If[FileExistsQ[FileNameJoin[{fullKrancDir, "Auxiliary", "Grammars", grammarFileName}]],
+ gf=FileNameJoin[{fullKrancDir, "Auxiliary", "Grammars", grammarFileName}],
+ ThrowError[StringForm["Cannot find grammar '`1`'", grammarFileName]]]];
+
+ g = JavaNew["edu.lsu.cct.piraha.Grammar"];
+ g@compileFile[JavaNew["java.io.File", gf]];
+
+ c = Grammar`readContents[JavaNew["java.io.File", absPath@inputFileName]];
+
+ m = g@matcher[pattern, c];
+
+ If[!m@match[0], ThrowError["Failed to parse input file: ",m@near[]@toString[]]];
+
+ sw = JavaNew["java.io.StringWriter"];
+ dout = JavaNew["edu.lsu.cct.piraha.DebugOutput", JavaNew["java.io.PrintWriter", sw]];
+ m@dumpMatchesXML[dout];
+ dout@flush[];
+ xmlString = sw@toString[];
+ xml = ImportString[xmlString, "XML"];
+ xml]];
+
+End[];
+
+EndPackage[];