diff options
Diffstat (limited to 'old-lib/javascript')
| -rw-r--r-- | old-lib/javascript/editor.html | 17 | ||||
| -rw-r--r-- | old-lib/javascript/editorGrammar.js | 1 | ||||
| -rw-r--r-- | old-lib/javascript/empty.png | bin | 0 -> 161 bytes | |||
| -rw-r--r-- | old-lib/javascript/gfjseditor.js | 1267 | ||||
| -rw-r--r-- | old-lib/javascript/gflib-xhtml-voice.js | 54 | ||||
| -rw-r--r-- | old-lib/javascript/gflib.js | 1128 | ||||
| -rw-r--r-- | old-lib/javascript/grammar.js | 1 | ||||
| -rw-r--r-- | old-lib/javascript/minus.png | bin | 0 -> 201 bytes | |||
| -rw-r--r-- | old-lib/javascript/plus.png | bin | 0 -> 229 bytes | |||
| -rw-r--r-- | old-lib/javascript/style.css | 241 | ||||
| -rw-r--r-- | old-lib/javascript/translator.css | 54 | ||||
| -rw-r--r-- | old-lib/javascript/translator.html | 48 | ||||
| -rw-r--r-- | old-lib/javascript/translator.js | 51 |
13 files changed, 2862 insertions, 0 deletions
diff --git a/old-lib/javascript/editor.html b/old-lib/javascript/editor.html new file mode 100644 index 000000000..dd189d9ab --- /dev/null +++ b/old-lib/javascript/editor.html @@ -0,0 +1,17 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link rel="stylesheet" type="text/css" href="style.css" />
+ <script type="text/javascript" src="gflib.js"></script>
+ <script type="text/javascript" src="editorGrammar.js"></script>
+ <script type="text/javascript" src="grammar.js"></script>
+ <script type="text/javascript" src="gfjseditor.js"></script>
+ <title>Web-based Syntax Editor</title>
+ </head>
+ <body onload="mkEditor('editor', Food)" onkeydown="hotKeys(event)">
+ <div id="editor">
+ </div>
+ </body>
+</html>
diff --git a/old-lib/javascript/editorGrammar.js b/old-lib/javascript/editorGrammar.js new file mode 100644 index 000000000..a4cc01ea5 --- /dev/null +++ b/old-lib/javascript/editorGrammar.js @@ -0,0 +1 @@ +var Editor = new GFGrammar(new GFAbstract("Sentence",{Available: new Type([], "Adjective"), Bulgarian: new Type([], "Noun"), Command: new Type(["Verb", "Determiner", "Noun"], "Sentence"), CommandAdj: new Type(["Verb", "Determiner", "Adjective", "Noun"], "Sentence"), Copy: new Type([], "Verb"), Cut: new Type([], "Verb"), Danish: new Type([], "Noun"), DefPlDet: new Type([], "Determiner"), DefSgDet: new Type([], "Determiner"), Delete: new Type([], "Verb"), English: new Type([], "Noun"), Enter: new Type([], "Verb"), ErrorMessage: new Type(["Adjective", "Noun"], "Sentence"), Finnish: new Type([], "Noun"), Float_N: new Type([], "Noun"), French: new Type([], "Noun"), German: new Type([], "Noun"), IndefPlDet: new Type([], "Determiner"), IndefSgDet: new Type([], "Determiner"), Integer_N: new Type([], "Noun"), Italian: new Type([], "Noun"), Label: new Type(["Noun"], "Sentence"), Language: new Type([], "Noun"), Next: new Type([], "Adjective"), Node: new Type([], "Noun"), Norwegian: new Type([], "Noun"), Page: new Type([], "Noun"), Parse: new Type([], "Verb"), Paste: new Type([], "Verb"), Previous: new Type([], "Adjective"), RandomlyCommand: new Type(["Verb", "Determiner", "Noun"], "Sentence"), Redo: new Type([], "Verb"), Refine: new Type([], "Verb"), Refinement: new Type([], "Noun"), Replace: new Type([], "Verb"), Russian: new Type([], "Noun"), Select: new Type([], "Verb"), Show: new Type([], "Verb"), SingleWordCommand: new Type(["Verb"], "Sentence"), Spanish: new Type([], "Noun"), String_N: new Type([], "Noun"), Swedish: new Type([], "Noun"), Tree: new Type([], "Noun"), Undo: new Type([], "Verb"), Wrap: new Type([], "Verb"), Wrapper: new Type([], "Noun")}),{EditorEng: new GFConcrete({coding: "utf8"},{Available: function(cs){return new Arr(new Suffix("available", new Arr(new Str(""), new Str("r"), new Str("st"), new Str("ly"))));}, Bulgarian: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_4", cs), Editor.concretes["EditorEng"].rule("_4", cs)), new Int(0));}, Command: function(cs){return new Arr(new Seq(Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_11", cs), Editor.concretes["EditorEng"].rule("_14", cs), Editor.concretes["EditorEng"].rule("_18", cs)));}, CommandAdj: function(cs){return new Arr(new Seq(Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_11", cs),(new Arr(Editor.concretes["EditorEng"].rule("_13", cs), Editor.concretes["EditorEng"].rule("_13", cs), Editor.concretes["EditorEng"].rule("_13", cs), Editor.concretes["EditorEng"].rule("_13", cs), Editor.concretes["EditorEng"].rule("_13", cs), Editor.concretes["EditorEng"].rule("_13", cs), Editor.concretes["EditorEng"].rule("_13", cs), Editor.concretes["EditorEng"].rule("_13", cs))).sel(Editor.concretes["EditorEng"].rule("_22", cs).sel(cs[3].sel(new Int(1)))), cs[3].sel(new Int(0)).sel(new Int(0)).sel(new Int(1)), Editor.concretes["EditorEng"].rule("_18", cs)));}, Copy: function(cs){return new Arr(new Suffix("Cop", new Arr(new Str("y"), new Str("ies"), new Str("ied"), new Str("ying"))), new Int(1));}, Cut: function(cs){return new Arr(new Suffix("Cut", Editor.concretes["EditorEng"].rule("_34", cs)), new Int(1));}, Danish: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_37", cs), Editor.concretes["EditorEng"].rule("_37", cs)), new Int(0));}, DefPlDet: function(cs){return Editor.concretes["EditorEng"].rule("_43", cs);}, DefSgDet: function(cs){return Editor.concretes["EditorEng"].rule("_43", cs);}, Delete: function(cs){return new Arr(new Suffix("Delet", Editor.concretes["EditorEng"].rule("_44", cs)), new Int(1));}, English: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_47", cs), Editor.concretes["EditorEng"].rule("_47", cs)), new Int(0));}, Enter: function(cs){return new Arr(new Suffix("Enter", Editor.concretes["EditorEng"].rule("_34", cs)), new Int(1));}, ErrorMessage: function(cs){return new Arr(new Seq(new Str("there"),(new Arr(new Seq(new Str("am"), new Str("not")), new Str("aren't"), new Str("aren't"), new Str("aren't"), new Str("isn't"), new Str("isn't"), new Str("isn't"), new Str("aren't"))).sel(Editor.concretes["EditorEng"].rule("_59", cs)), Editor.concretes["EditorEng"].rule("_62", cs), Editor.concretes["EditorEng"].rule("_62", cs), Editor.concretes["EditorEng"].rule("_62", cs),(new Arr(Editor.concretes["EditorEng"].rule("_67", cs), Editor.concretes["EditorEng"].rule("_67", cs), Editor.concretes["EditorEng"].rule("_67", cs), Editor.concretes["EditorEng"].rule("_67", cs), Editor.concretes["EditorEng"].rule("_67", cs), Editor.concretes["EditorEng"].rule("_67", cs), Editor.concretes["EditorEng"].rule("_67", cs), Editor.concretes["EditorEng"].rule("_67", cs))).sel(Editor.concretes["EditorEng"].rule("_59", cs))));}, Finnish: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_72", cs), Editor.concretes["EditorEng"].rule("_72", cs)), new Int(0));}, Float_N: function(cs){return new Arr(new Arr(new Suffix("float", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("floats", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, French: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_80", cs), Editor.concretes["EditorEng"].rule("_80", cs)), new Int(0));}, German: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_83", cs), Editor.concretes["EditorEng"].rule("_83", cs)), new Int(0));}, IndefPlDet: function(cs){return Editor.concretes["EditorEng"].rule("_89", cs);}, IndefSgDet: function(cs){return Editor.concretes["EditorEng"].rule("_89", cs);}, Integer_N: function(cs){return new Arr(new Arr(new Suffix("integer", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("integers", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, Italian: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_94", cs), Editor.concretes["EditorEng"].rule("_94", cs)), new Int(0));}, Label: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_8", cs).sel(new Int(0)));}, Language: function(cs){return new Arr(new Arr(new Suffix("language", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("languages", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, Next: function(cs){return new Arr(new Suffix("next", Editor.concretes["EditorEng"].rule("_103", cs)));}, Node: function(cs){return new Arr(new Arr(new Suffix("node", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("nodes", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, Norwegian: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_110", cs), Editor.concretes["EditorEng"].rule("_110", cs)), new Int(0));}, Page: function(cs){return new Arr(new Arr(new Suffix("page", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("pages", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, Parse: function(cs){return new Arr(new Suffix("Pars", Editor.concretes["EditorEng"].rule("_44", cs)), new Int(1));}, Paste: function(cs){return new Arr(new Suffix("Past", Editor.concretes["EditorEng"].rule("_44", cs)), new Int(1));}, Previous: function(cs){return new Arr(new Suffix("previous", Editor.concretes["EditorEng"].rule("_103", cs)));}, RandomlyCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_11", cs), Editor.concretes["EditorEng"].rule("_14", cs), Editor.concretes["EditorEng"].rule("_18", cs), new Str("at"), new Str("random")));}, Redo: function(cs){return new Arr(new Suffix("Redo", Editor.concretes["EditorEng"].rule("_125", cs)), new Int(1));}, Refine: function(cs){return new Arr(new Suffix("Refin", Editor.concretes["EditorEng"].rule("_44", cs)), new Int(1));}, Refinement: function(cs){return new Arr(new Arr(new Suffix("refinement", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("refinements", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, Replace: function(cs){return new Arr(new Suffix("Replac", Editor.concretes["EditorEng"].rule("_44", cs)), new Int(1));}, Russian: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_136", cs), Editor.concretes["EditorEng"].rule("_136", cs)), new Int(0));}, Select: function(cs){return new Arr(new Suffix("Select", Editor.concretes["EditorEng"].rule("_34", cs)), new Int(1));}, Show: function(cs){return new Arr(new Suffix("Show", Editor.concretes["EditorEng"].rule("_34", cs)), new Int(1));}, SingleWordCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_18", cs)));}, Spanish: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_145", cs), Editor.concretes["EditorEng"].rule("_145", cs)), new Int(0));}, String_N: function(cs){return new Arr(new Arr(new Suffix("string", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("strings", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, Swedish: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_152", cs), Editor.concretes["EditorEng"].rule("_152", cs)), new Int(0));}, Tree: function(cs){return new Arr(new Arr(new Suffix("tree", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("trees", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, Undo: function(cs){return new Arr(new Suffix("Undo", Editor.concretes["EditorEng"].rule("_125", cs)), new Int(1));}, Wrap: function(cs){return new Arr(new Suffix("Wrap", Editor.concretes["EditorEng"].rule("_34", cs)), new Int(1));}, Wrapper: function(cs){return new Arr(new Arr(new Suffix("wrapper", Editor.concretes["EditorEng"].rule("_3", cs)), new Suffix("wrappers", Editor.concretes["EditorEng"].rule("_76", cs))), new Int(0));}, _10: function(cs){return Editor.concretes["EditorEng"].rule("_9", cs).sel(new Int(1));}, _103: function(cs){return new Arr(new Str(""), new Str("er"), new Str("est"), new Str("ly"));}, _11: function(cs){return Editor.concretes["EditorEng"].rule("_10", cs).sel(new Int(0));}, _110: function(cs){return new Suffix("Norwegian", Editor.concretes["EditorEng"].rule("_3", cs));}, _12: function(cs){return cs[2].sel(new Int(0));}, _125: function(cs){return new Arr(new Str(""), new Str("es"), new Str("ed"), new Str("ing"));}, _13: function(cs){return Editor.concretes["EditorEng"].rule("_12", cs).sel(new Int(0));}, _136: function(cs){return new Suffix("Russian", Editor.concretes["EditorEng"].rule("_3", cs));}, _14: function(cs){return Editor.concretes["EditorEng"].rule("_13", cs).sel(new Int(1));}, _145: function(cs){return new Suffix("Spanish", Editor.concretes["EditorEng"].rule("_3", cs));}, _15: function(cs){return new Seq();}, _152: function(cs){return new Suffix("Swedish", Editor.concretes["EditorEng"].rule("_3", cs));}, _16: function(cs){return new Arr(new Str("yourself"), Editor.concretes["EditorEng"].rule("_15", cs));}, _167: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0]);}, _169: function(cs){return new Arr(cs[0], cs[0]);}, _17: function(cs){return cs[0].sel(new Int(1));}, _172: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _18: function(cs){return Editor.concretes["EditorEng"].rule("_16", cs).sel(Editor.concretes["EditorEng"].rule("_17", cs));}, _22: function(cs){return new Arr(new Int(4), new Int(5), new Int(6));}, _3: function(cs){return new Arr(new Str(""), new Str(""), new Str("'s"));}, _34: function(cs){return new Arr(new Str(""), new Str("s"), new Str("ed"), new Str("ing"));}, _37: function(cs){return new Suffix("Danish", Editor.concretes["EditorEng"].rule("_3", cs));}, _4: function(cs){return new Suffix("Bulgarian", Editor.concretes["EditorEng"].rule("_3", cs));}, _40: function(cs){return new Arr(new Str(""), new Str(""));}, _41: function(cs){return new Suffix("the", Editor.concretes["EditorEng"].rule("_40", cs));}, _42: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_41", cs), Editor.concretes["EditorEng"].rule("_41", cs));}, _43: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_42", cs));}, _44: function(cs){return new Arr(new Str("e"), new Str("es"), new Str("ed"), new Str("ing"));}, _47: function(cs){return new Suffix("English", Editor.concretes["EditorEng"].rule("_3", cs));}, _54: function(cs){return new Arr(new Int(4), new Int(7));}, _55: function(cs){return new Arr(new Int(0), new Int(1), new Int(0), new Int(1), new Int(0), new Int(0), new Int(0), new Int(1));}, _56: function(cs){return cs[1].sel(new Int(1));}, _57: function(cs){return Editor.concretes["EditorEng"].rule("_22", cs).sel(Editor.concretes["EditorEng"].rule("_56", cs));}, _58: function(cs){return Editor.concretes["EditorEng"].rule("_55", cs).sel(Editor.concretes["EditorEng"].rule("_57", cs));}, _59: function(cs){return Editor.concretes["EditorEng"].rule("_54", cs).sel(Editor.concretes["EditorEng"].rule("_58", cs));}, _61: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs));}, _62: function(cs){return Editor.concretes["EditorEng"].rule("_61", cs).sel(Editor.concretes["EditorEng"].rule("_59", cs));}, _63: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_8", cs), Editor.concretes["EditorEng"].rule("_8", cs));}, _64: function(cs){return Editor.concretes["EditorEng"].rule("_63", cs).sel(Editor.concretes["EditorEng"].rule("_57", cs));}, _65: function(cs){return Editor.concretes["EditorEng"].rule("_9", cs).sel(new Int(0));}, _66: function(cs){return Editor.concretes["EditorEng"].rule("_65", cs).sel(new Int(1));}, _67: function(cs){return new Seq(new Str("a"), Editor.concretes["EditorEng"].rule("_64", cs), Editor.concretes["EditorEng"].rule("_66", cs));}, _7: function(cs){return cs[0].sel(new Int(0));}, _72: function(cs){return new Suffix("Finnish", Editor.concretes["EditorEng"].rule("_3", cs));}, _76: function(cs){return new Arr(new Str(""), new Str(""), new Str("'"));}, _8: function(cs){return Editor.concretes["EditorEng"].rule("_7", cs).sel(new Int(0));}, _80: function(cs){return new Suffix("French", Editor.concretes["EditorEng"].rule("_3", cs));}, _83: function(cs){return new Suffix("German", Editor.concretes["EditorEng"].rule("_3", cs));}, _86: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_15", cs), Editor.concretes["EditorEng"].rule("_15", cs));}, _87: function(cs){return new Arr(new Str("a"), Editor.concretes["EditorEng"].rule("_15", cs));}, _88: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_86", cs), Editor.concretes["EditorEng"].rule("_87", cs));}, _89: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_88", cs));}, _9: function(cs){return cs[1].sel(new Int(0));}, _94: function(cs){return new Suffix("Italian", Editor.concretes["EditorEng"].rule("_3", cs));}, Adjective: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_167", cs));}, Determiner: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_169", cs), Editor.concretes["EditorEng"].rule("_169", cs)));}, Noun: function(cs){return new Arr(new Arr(Editor.concretes["EditorEng"].rule("_172", cs), Editor.concretes["EditorEng"].rule("_172", cs)), new Int(0));}, Sentence: function(cs){return new Arr(cs[0]);}, Verb: function(cs){return new Arr(Editor.concretes["EditorEng"].rule("_167", cs), new Int(0));}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}, new Parser("Sentence",[new Rule(10, new FunApp("Wrapper",[]),[],[[new Terminal("wrapper")]]), new Rule(9, new FunApp("Wrapper",[]),[],[[new Terminal("wrapper")]]), new Rule(8, new FunApp("Wrapper",[]),[],[[new Terminal("wrapper's")]]), new Rule(7, new FunApp("Wrapper",[]),[],[[new Terminal("wrappers")]]), new Rule(6, new FunApp("Wrapper",[]),[],[[new Terminal("wrappers")]]), new Rule(5, new FunApp("Wrapper",[]),[],[[new Terminal("wrappers'")]]), new Rule(17, new FunApp("Wrap",[]),[],[[new Terminal("Wrap")]]), new Rule(20, new FunApp("Wrap",[]),[],[[new Terminal("Wraps")]]), new Rule(19, new FunApp("Wrap",[]),[],[[new Terminal("Wraped")]]), new Rule(18, new FunApp("Wrap",[]),[],[[new Terminal("Wraping")]]), new Rule(17, new FunApp("Undo",[]),[],[[new Terminal("Undo")]]), new Rule(20, new FunApp("Undo",[]),[],[[new Terminal("Undoes")]]), new Rule(19, new FunApp("Undo",[]),[],[[new Terminal("Undoed")]]), new Rule(18, new FunApp("Undo",[]),[],[[new Terminal("Undoing")]]), new Rule(10, new FunApp("Tree",[]),[],[[new Terminal("tree")]]), new Rule(9, new FunApp("Tree",[]),[],[[new Terminal("tree")]]), new Rule(8, new FunApp("Tree",[]),[],[[new Terminal("tree's")]]), new Rule(7, new FunApp("Tree",[]),[],[[new Terminal("trees")]]), new Rule(6, new FunApp("Tree",[]),[],[[new Terminal("trees")]]), new Rule(5, new FunApp("Tree",[]),[],[[new Terminal("trees'")]]), new Rule(10, new FunApp("Swedish",[]),[],[[new Terminal("Swedish")]]), new Rule(9, new FunApp("Swedish",[]),[],[[new Terminal("Swedish")]]), new Rule(8, new FunApp("Swedish",[]),[],[[new Terminal("Swedish's")]]), new Rule(7, new FunApp("Swedish",[]),[],[[new Terminal("Swedish")]]), new Rule(6, new FunApp("Swedish",[]),[],[[new Terminal("Swedish")]]), new Rule(5, new FunApp("Swedish",[]),[],[[new Terminal("Swedish's")]]), new Rule(10, new FunApp("String_N",[]),[],[[new Terminal("string")]]), new Rule(9, new FunApp("String_N",[]),[],[[new Terminal("string")]]), new Rule(8, new FunApp("String_N",[]),[],[[new Terminal("string's")]]), new Rule(7, new FunApp("String_N",[]),[],[[new Terminal("strings")]]), new Rule(6, new FunApp("String_N",[]),[],[[new Terminal("strings")]]), new Rule(5, new FunApp("String_N",[]),[],[[new Terminal("strings'")]]), new Rule(10, new FunApp("Spanish",[]),[],[[new Terminal("Spanish")]]), new Rule(9, new FunApp("Spanish",[]),[],[[new Terminal("Spanish")]]), new Rule(8, new FunApp("Spanish",[]),[],[[new Terminal("Spanish's")]]), new Rule(7, new FunApp("Spanish",[]),[],[[new Terminal("Spanish")]]), new Rule(6, new FunApp("Spanish",[]),[],[[new Terminal("Spanish")]]), new Rule(5, new FunApp("Spanish",[]),[],[[new Terminal("Spanish's")]]), new Rule(11, new FunApp("SingleWordCommand",[new Arg(0)]),[17],[[new ArgProj(0, 0)]]), new Rule(11, new FunApp("SingleWordCommand",[new Arg(0)]),[16],[[new ArgProj(0, 0), new Terminal("yourself")]]), new Rule(17, new FunApp("Show",[]),[],[[new Terminal("Show")]]), new Rule(20, new FunApp("Show",[]),[],[[new Terminal("Shows")]]), new Rule(19, new FunApp("Show",[]),[],[[new Terminal("Showed")]]), new Rule(18, new FunApp("Show",[]),[],[[new Terminal("Showing")]]), new Rule(17, new FunApp("Select",[]),[],[[new Terminal("Select")]]), new Rule(20, new FunApp("Select",[]),[],[[new Terminal("Selects")]]), new Rule(19, new FunApp("Select",[]),[],[[new Terminal("Selected")]]), new Rule(18, new FunApp("Select",[]),[],[[new Terminal("Selecting")]]), new Rule(10, new FunApp("Russian",[]),[],[[new Terminal("Russian")]]), new Rule(9, new FunApp("Russian",[]),[],[[new Terminal("Russian")]]), new Rule(8, new FunApp("Russian",[]),[],[[new Terminal("Russian's")]]), new Rule(7, new FunApp("Russian",[]),[],[[new Terminal("Russian")]]), new Rule(6, new FunApp("Russian",[]),[],[[new Terminal("Russian")]]), new Rule(5, new FunApp("Russian",[]),[],[[new Terminal("Russian's")]]), new Rule(17, new FunApp("Replace",[]),[],[[new Terminal("Replace")]]), new Rule(20, new FunApp("Replace",[]),[],[[new Terminal("Replaces")]]), new Rule(19, new FunApp("Replace",[]),[],[[new Terminal("Replaced")]]), new Rule(18, new FunApp("Replace",[]),[],[[new Terminal("Replacing")]]), new Rule(10, new FunApp("Refinement",[]),[],[[new Terminal("refinement")]]), new Rule(9, new FunApp("Refinement",[]),[],[[new Terminal("refinement")]]), new Rule(8, new FunApp("Refinement",[]),[],[[new Terminal("refinement's")]]), new Rule(7, new FunApp("Refinement",[]),[],[[new Terminal("refinements")]]), new Rule(6, new FunApp("Refinement",[]),[],[[new Terminal("refinements")]]), new Rule(5, new FunApp("Refinement",[]),[],[[new Terminal("refinements'")]]), new Rule(17, new FunApp("Refine",[]),[],[[new Terminal("Refine")]]), new Rule(20, new FunApp("Refine",[]),[],[[new Terminal("Refines")]]), new Rule(19, new FunApp("Refine",[]),[],[[new Terminal("Refined")]]), new Rule(18, new FunApp("Refine",[]),[],[[new Terminal("Refining")]]), new Rule(17, new FunApp("Redo",[]),[],[[new Terminal("Redo")]]), new Rule(20, new FunApp("Redo",[]),[],[[new Terminal("Redoes")]]), new Rule(19, new FunApp("Redo",[]),[],[[new Terminal("Redoed")]]), new Rule(18, new FunApp("Redo",[]),[],[[new Terminal("Redoing")]]), new Rule(11, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[17, 15, 12],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("at"), new Terminal("random")]]), new Rule(11, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[16, 15, 12],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("yourself"), new Terminal("at"), new Terminal("random")]]), new Rule(4, new FunApp("Previous",[]),[],[[new Terminal("previous")]]), new Rule(3, new FunApp("Previous",[]),[],[[new Terminal("previouser")]]), new Rule(2, new FunApp("Previous",[]),[],[[new Terminal("previousest")]]), new Rule(1, new FunApp("Previous",[]),[],[[new Terminal("previously")]]), new Rule(17, new FunApp("Paste",[]),[],[[new Terminal("Paste")]]), new Rule(20, new FunApp("Paste",[]),[],[[new Terminal("Pastes")]]), new Rule(19, new FunApp("Paste",[]),[],[[new Terminal("Pasted")]]), new Rule(18, new FunApp("Paste",[]),[],[[new Terminal("Pasting")]]), new Rule(17, new FunApp("Parse",[]),[],[[new Terminal("Parse")]]), new Rule(20, new FunApp("Parse",[]),[],[[new Terminal("Parses")]]), new Rule(19, new FunApp("Parse",[]),[],[[new Terminal("Parsed")]]), new Rule(18, new FunApp("Parse",[]),[],[[new Terminal("Parsing")]]), new Rule(10, new FunApp("Page",[]),[],[[new Terminal("page")]]), new Rule(9, new FunApp("Page",[]),[],[[new Terminal("page")]]), new Rule(8, new FunApp("Page",[]),[],[[new Terminal("page's")]]), new Rule(7, new FunApp("Page",[]),[],[[new Terminal("pages")]]), new Rule(6, new FunApp("Page",[]),[],[[new Terminal("pages")]]), new Rule(5, new FunApp("Page",[]),[],[[new Terminal("pages'")]]), new Rule(10, new FunApp("Norwegian",[]),[],[[new Terminal("Norwegian")]]), new Rule(9, new FunApp("Norwegian",[]),[],[[new Terminal("Norwegian")]]), new Rule(8, new FunApp("Norwegian",[]),[],[[new Terminal("Norwegian's")]]), new Rule(7, new FunApp("Norwegian",[]),[],[[new Terminal("Norwegian")]]), new Rule(6, new FunApp("Norwegian",[]),[],[[new Terminal("Norwegian")]]), new Rule(5, new FunApp("Norwegian",[]),[],[[new Terminal("Norwegian's")]]), new Rule(10, new FunApp("Node",[]),[],[[new Terminal("node")]]), new Rule(9, new FunApp("Node",[]),[],[[new Terminal("node")]]), new Rule(8, new FunApp("Node",[]),[],[[new Terminal("node's")]]), new Rule(7, new FunApp("Node",[]),[],[[new Terminal("nodes")]]), new Rule(6, new FunApp("Node",[]),[],[[new Terminal("nodes")]]), new Rule(5, new FunApp("Node",[]),[],[[new Terminal("nodes'")]]), new Rule(4, new FunApp("Next",[]),[],[[new Terminal("next")]]), new Rule(3, new FunApp("Next",[]),[],[[new Terminal("nexter")]]), new Rule(2, new FunApp("Next",[]),[],[[new Terminal("nextest")]]), new Rule(1, new FunApp("Next",[]),[],[[new Terminal("nextly")]]), new Rule(10, new FunApp("Language",[]),[],[[new Terminal("language")]]), new Rule(9, new FunApp("Language",[]),[],[[new Terminal("language")]]), new Rule(8, new FunApp("Language",[]),[],[[new Terminal("language's")]]), new Rule(7, new FunApp("Language",[]),[],[[new Terminal("languages")]]), new Rule(6, new FunApp("Language",[]),[],[[new Terminal("languages")]]), new Rule(5, new FunApp("Language",[]),[],[[new Terminal("languages'")]]), new Rule(11, new FunApp("Label",[new Arg(0)]),[24],[[new ArgProj(0, 0)]]), new Rule(24, new Arg(0),[26],[[new ArgProj(0, 0)]]), new Rule(24, new Arg(0),[25],[[new ArgProj(0, 0)]]), new Rule(24, new Arg(0),[10],[[new ArgProj(0, 0)]]), new Rule(10, new FunApp("Italian",[]),[],[[new Terminal("Italian")]]), new Rule(9, new FunApp("Italian",[]),[],[[new Terminal("Italian")]]), new Rule(8, new FunApp("Italian",[]),[],[[new Terminal("Italian's")]]), new Rule(7, new FunApp("Italian",[]),[],[[new Terminal("Italian")]]), new Rule(6, new FunApp("Italian",[]),[],[[new Terminal("Italian")]]), new Rule(5, new FunApp("Italian",[]),[],[[new Terminal("Italian's")]]), new Rule(10, new FunApp("Integer_N",[]),[],[[new Terminal("integer")]]), new Rule(9, new FunApp("Integer_N",[]),[],[[new Terminal("integer")]]), new Rule(8, new FunApp("Integer_N",[]),[],[[new Terminal("integer's")]]), new Rule(7, new FunApp("Integer_N",[]),[],[[new Terminal("integers")]]), new Rule(6, new FunApp("Integer_N",[]),[],[[new Terminal("integers")]]), new Rule(5, new FunApp("Integer_N",[]),[],[[new Terminal("integers'")]]), new Rule(23, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(22, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(15, new FunApp("IndefSgDet",[]),[],[[new Terminal("an")]]), new Rule(15, new FunApp("IndefSgDet",[]),[],[[new Terminal("a")]]), new Rule(21, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(23, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(22, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(15, new FunApp("IndefPlDet",[]),[],[[new Terminal("an")]]), new Rule(15, new FunApp("IndefPlDet",[]),[],[[new Terminal("a")]]), new Rule(21, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(10, new FunApp("German",[]),[],[[new Terminal("German")]]), new Rule(9, new FunApp("German",[]),[],[[new Terminal("German")]]), new Rule(8, new FunApp("German",[]),[],[[new Terminal("German's")]]), new Rule(7, new FunApp("German",[]),[],[[new Terminal("German")]]), new Rule(6, new FunApp("German",[]),[],[[new Terminal("German")]]), new Rule(5, new FunApp("German",[]),[],[[new Terminal("German's")]]), new Rule(10, new FunApp("French",[]),[],[[new Terminal("French")]]), new Rule(9, new FunApp("French",[]),[],[[new Terminal("French")]]), new Rule(8, new FunApp("French",[]),[],[[new Terminal("French's")]]), new Rule(7, new FunApp("French",[]),[],[[new Terminal("French")]]), new Rule(6, new FunApp("French",[]),[],[[new Terminal("French")]]), new Rule(5, new FunApp("French",[]),[],[[new Terminal("French's")]]), new Rule(10, new FunApp("Float_N",[]),[],[[new Terminal("float")]]), new Rule(9, new FunApp("Float_N",[]),[],[[new Terminal("float")]]), new Rule(8, new FunApp("Float_N",[]),[],[[new Terminal("float's")]]), new Rule(7, new FunApp("Float_N",[]),[],[[new Terminal("floats")]]), new Rule(6, new FunApp("Float_N",[]),[],[[new Terminal("floats")]]), new Rule(5, new FunApp("Float_N",[]),[],[[new Terminal("floats'")]]), new Rule(10, new FunApp("Finnish",[]),[],[[new Terminal("Finnish")]]), new Rule(9, new FunApp("Finnish",[]),[],[[new Terminal("Finnish")]]), new Rule(8, new FunApp("Finnish",[]),[],[[new Terminal("Finnish's")]]), new Rule(7, new FunApp("Finnish",[]),[],[[new Terminal("Finnish")]]), new Rule(6, new FunApp("Finnish",[]),[],[[new Terminal("Finnish")]]), new Rule(5, new FunApp("Finnish",[]),[],[[new Terminal("Finnish's")]]), new Rule(11, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[4, 14],[[new Terminal("there"), new Terminal("isn't"), new Terminal("an"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(11, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[4, 14],[[new Terminal("there"), new Terminal("isn't"), new Terminal("a"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(11, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[4, 13],[[new Terminal("there"), new Terminal("isn't"), new Terminal("an"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(11, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[4, 13],[[new Terminal("there"), new Terminal("isn't"), new Terminal("a"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(11, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[4, 9],[[new Terminal("there"), new Terminal("isn't"), new Terminal("an"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(11, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[4, 9],[[new Terminal("there"), new Terminal("isn't"), new Terminal("a"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(17, new FunApp("Enter",[]),[],[[new Terminal("Enter")]]), new Rule(20, new FunApp("Enter",[]),[],[[new Terminal("Enters")]]), new Rule(19, new FunApp("Enter",[]),[],[[new Terminal("Entered")]]), new Rule(18, new FunApp("Enter",[]),[],[[new Terminal("Entering")]]), new Rule(10, new FunApp("English",[]),[],[[new Terminal("English")]]), new Rule(9, new FunApp("English",[]),[],[[new Terminal("English")]]), new Rule(8, new FunApp("English",[]),[],[[new Terminal("English's")]]), new Rule(7, new FunApp("English",[]),[],[[new Terminal("English")]]), new Rule(6, new FunApp("English",[]),[],[[new Terminal("English")]]), new Rule(5, new FunApp("English",[]),[],[[new Terminal("English's")]]), new Rule(17, new FunApp("Delete",[]),[],[[new Terminal("Delete")]]), new Rule(20, new FunApp("Delete",[]),[],[[new Terminal("Deletes")]]), new Rule(19, new FunApp("Delete",[]),[],[[new Terminal("Deleted")]]), new Rule(18, new FunApp("Delete",[]),[],[[new Terminal("Deleting")]]), new Rule(23, new FunApp("DefSgDet",[]),[],[[new Terminal("the")]]), new Rule(22, new FunApp("DefSgDet",[]),[],[[new Terminal("the")]]), new Rule(15, new FunApp("DefSgDet",[]),[],[[new Terminal("the")]]), new Rule(21, new FunApp("DefSgDet",[]),[],[[new Terminal("the")]]), new Rule(23, new FunApp("DefPlDet",[]),[],[[new Terminal("the")]]), new Rule(22, new FunApp("DefPlDet",[]),[],[[new Terminal("the")]]), new Rule(15, new FunApp("DefPlDet",[]),[],[[new Terminal("the")]]), new Rule(21, new FunApp("DefPlDet",[]),[],[[new Terminal("the")]]), new Rule(10, new FunApp("Danish",[]),[],[[new Terminal("Danish")]]), new Rule(9, new FunApp("Danish",[]),[],[[new Terminal("Danish")]]), new Rule(8, new FunApp("Danish",[]),[],[[new Terminal("Danish's")]]), new Rule(7, new FunApp("Danish",[]),[],[[new Terminal("Danish")]]), new Rule(6, new FunApp("Danish",[]),[],[[new Terminal("Danish")]]), new Rule(5, new FunApp("Danish",[]),[],[[new Terminal("Danish's")]]), new Rule(17, new FunApp("Cut",[]),[],[[new Terminal("Cut")]]), new Rule(20, new FunApp("Cut",[]),[],[[new Terminal("Cuts")]]), new Rule(19, new FunApp("Cut",[]),[],[[new Terminal("Cuted")]]), new Rule(18, new FunApp("Cut",[]),[],[[new Terminal("Cuting")]]), new Rule(17, new FunApp("Copy",[]),[],[[new Terminal("Copy")]]), new Rule(20, new FunApp("Copy",[]),[],[[new Terminal("Copies")]]), new Rule(19, new FunApp("Copy",[]),[],[[new Terminal("Copied")]]), new Rule(18, new FunApp("Copy",[]),[],[[new Terminal("Copying")]]), new Rule(11, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[17, 15, 4, 14],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(11, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[17, 15, 4, 13],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(11, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[17, 15, 4, 9],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(11, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[16, 15, 4, 14],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("yourself")]]), new Rule(11, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[16, 15, 4, 13],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("yourself")]]), new Rule(11, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[16, 15, 4, 9],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("yourself")]]), new Rule(11, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[17, 15, 12],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(11, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[16, 15, 12],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("yourself")]]), new Rule(12, new Arg(0),[14],[[new ArgProj(0, 0)]]), new Rule(12, new Arg(0),[13],[[new ArgProj(0, 0)]]), new Rule(12, new Arg(0),[9],[[new ArgProj(0, 0)]]), new Rule(10, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgarian")]]), new Rule(9, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgarian")]]), new Rule(8, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgarian's")]]), new Rule(7, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgarian")]]), new Rule(6, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgarian")]]), new Rule(5, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgarian's")]]), new Rule(4, new FunApp("Available",[]),[],[[new Terminal("available")]]), new Rule(3, new FunApp("Available",[]),[],[[new Terminal("availabler")]]), new Rule(2, new FunApp("Available",[]),[],[[new Terminal("availablest")]]), new Rule(1, new FunApp("Available",[]),[],[[new Terminal("availablely")]])],{Adjective:[4, 3, 2, 1], Determiner:[23, 15, 22, 21], Float:[-3], Int:[-2], Noun:[24, 10, 25, 26, 7, 12, 9, 13, 14, 6, 8, 5], Sentence:[11], String:[-1], Verb:[16, 17, 20, 19, 18], _Var:[-4]})), EditorFre: new GFConcrete({coding: "utf8"},{Available: function(cs){return new Arr(new Arr(new Suffix("disponible", new Arr(new Str(""), new Str("s"), new Str(""), new Str("s"), new Str("ment"))), Editor.concretes["EditorFre"].rule("_5", cs), Editor.concretes["EditorFre"].rule("_5", cs)), new Int(1));}, Bulgarian: function(cs){return new Arr(new Suffix("bulgarien", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, Command: function(cs){return new Arr(new Seq(Editor.concretes["EditorFre"].rule("_41", cs), Editor.concretes["EditorFre"].rule("_43", cs), Editor.concretes["EditorFre"].rule("_45", cs), Editor.concretes["EditorFre"].rule("_58", cs)));}, CommandAdj: function(cs){return new Arr(new Seq((new Arr(Editor.concretes["EditorFre"].rule("_68", cs), Editor.concretes["EditorFre"].rule("_69", cs), Editor.concretes["EditorFre"].rule("_70", cs), Editor.concretes["EditorFre"].rule("_71", cs), Editor.concretes["EditorFre"].rule("_72", cs), Editor.concretes["EditorFre"].rule("_73", cs), Editor.concretes["EditorFre"].rule("_68", cs), Editor.concretes["EditorFre"].rule("_69", cs), Editor.concretes["EditorFre"].rule("_70", cs), Editor.concretes["EditorFre"].rule("_71", cs), Editor.concretes["EditorFre"].rule("_72", cs), Editor.concretes["EditorFre"].rule("_73", cs), Editor.concretes["EditorFre"].rule("_67", cs), Editor.concretes["EditorFre"].rule("_67", cs))).sel(Editor.concretes["EditorFre"].rule("_40", cs)), Editor.concretes["EditorFre"].rule("_43", cs), Editor.concretes["EditorFre"].rule("_45", cs),(new Arr(new Arr(Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_87", cs)), new Arr(Editor.concretes["EditorFre"].rule("_87", cs), Editor.concretes["EditorFre"].rule("_87", cs)))).sel(Editor.concretes["EditorFre"].rule("_25", cs)).sel(Editor.concretes["EditorFre"].rule("_27", cs))));}, Copy: function(cs){return new Arr(new Suffix("copi", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Cut: function(cs){return new Arr(new Suffix("coup", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Danish: function(cs){return new Arr(new Suffix("danois", Editor.concretes["EditorFre"].rule("_100", cs)), new Int(0));}, DefPlDet: function(cs){return Editor.concretes["EditorFre"].rule("_112", cs);}, DefSgDet: function(cs){return Editor.concretes["EditorFre"].rule("_112", cs);}, Delete: function(cs){return new Arr(new Suffix("enlev", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, English: function(cs){return new Arr(new Suffix("anglais", Editor.concretes["EditorFre"].rule("_100", cs)), new Int(0));}, Enter: function(cs){return new Arr(new Suffix("introdui", new Arr(new Str("re"), new Str("re"), new Str("s"), new Str("s"), new Str("t"), new Str("sons"), new Str("sez"), new Str("sent"), new Str("se"), new Str("ses"), new Str("se"), new Str("sions"), new Str("siez"), new Str("sent"), new Str("s"), new Str("sons"), new Str("sez"), new Str("t"), new Str("ts"), new Str("te"), new Str("tes"), new Str("sant"))), new Int(0));}, ErrorMessage: function(cs){return new Arr(new Seq(new Str("il"), new Str("ne"), new Str("y"), new Str("a"), new Str("pas"),(new Arr(new Str("des"), new Str("des"))).sel(Editor.concretes["EditorFre"].rule("_121", cs)),(new Arr(new Seq(Editor.concretes["EditorFre"].rule("_125", cs), Editor.concretes["EditorFre"].rule("_47", cs)), new Seq(Editor.concretes["EditorFre"].rule("_47", cs), Editor.concretes["EditorFre"].rule("_125", cs)))).sel(Editor.concretes["EditorFre"].rule("_18", cs))));}, Finnish: function(cs){return new Arr(new Suffix("finnois", Editor.concretes["EditorFre"].rule("_100", cs)), new Int(0));}, Float_N: function(cs){return new Arr(new Suffix("réel", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, French: function(cs){return new Arr(new Suffix("français", Editor.concretes["EditorFre"].rule("_100", cs)), new Int(0));}, German: function(cs){return new Arr(new Suffix("allemand", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, IndefPlDet: function(cs){return Editor.concretes["EditorFre"].rule("_155", cs);}, IndefSgDet: function(cs){return Editor.concretes["EditorFre"].rule("_155", cs);}, Integer_N: function(cs){return new Arr(new Suffix("entier", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, Italian: function(cs){return new Arr(new Suffix("italien", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, Label: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_43", cs));}, Language: function(cs){return new Arr(new Suffix("langue", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(1));}, Next: function(cs){return new Arr(new Arr(new Suffix("prochain", Editor.concretes["EditorFre"].rule("_163", cs)), Editor.concretes["EditorFre"].rule("_170", cs), Editor.concretes["EditorFre"].rule("_170", cs)), new Int(1));}, Node: function(cs){return new Arr(new Suffix("noeud", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, Norwegian: function(cs){return new Arr(new Suffix("norvégien", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, Page: function(cs){return new Arr(new Suffix("page", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(1));}, Parse: function(cs){return new Arr(new Suffix("analys", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Paste: function(cs){return new Arr(new Suffix("coll", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Previous: function(cs){return new Arr(new Arr(new Suffix("précédent", Editor.concretes["EditorFre"].rule("_163", cs)), Editor.concretes["EditorFre"].rule("_189", cs), Editor.concretes["EditorFre"].rule("_189", cs)), new Int(1));}, RandomlyCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorFre"].rule("_41", cs), Editor.concretes["EditorFre"].rule("_43", cs), Editor.concretes["EditorFre"].rule("_45", cs), Editor.concretes["EditorFre"].rule("_58", cs), new Str("aléatoirement")));}, Redo: function(cs){return new Arr(new Suffix("ref", new Arr(new Str("aire"), new Str("aire"), new Str("ais"), new Str("ais"), new Str("ait"), new Str("aisons"), new Str("aites"), new Str("ont"), new Str("asse"), new Str("asses"), new Str("asse"), new Str("assions"), new Str("assiez"), new Str("assent"), new Str("ais"), new Str("aisons"), new Str("aites"), new Str("ait"), new Str("aits"), new Str("aite"), new Str("aites"), new Str("aisant"))), new Int(0));}, Refine: function(cs){return new Arr(new Suffix("raffin", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Refinement: function(cs){return new Arr(new Suffix("raffinement", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, Replace: function(cs){return new Arr(new Suffix("rempla", new Arr(new Str("cer"), new Str("cer"), new Str("ce"), new Str("ces"), new Str("ce"), new Str("çons"), new Str("cez"), new Str("cent"), new Str("ce"), new Str("ces"), new Str("ce"), new Str("cions"), new Str("ciez"), new Str("cent"), new Str("ce"), new Str("çons"), new Str("cez"), new Str("cé"), new Str("cés"), new Str("cée"), new Str("cées"), new Str("çant"))), new Int(0));}, Russian: function(cs){return new Arr(new Suffix("russe", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(1));}, Select: function(cs){return new Arr(new Suffix("selectionn", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Show: function(cs){return new Arr(new Suffix("montr", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, SingleWordCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorFre"].rule("_12", cs).sel(Editor.concretes["EditorFre"].rule("_20", cs)), Editor.concretes["EditorFre"].rule("_43", cs)));}, Spanish: function(cs){return new Arr(new Suffix("espagnol", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, String_N: function(cs){return new Arr(new Arr(new Seq(new Str("chaîne"), new Str("de"), new Str("charactères")), new Seq(new Str("chaînes"), new Str("de"), new Str("charactères"))), new Int(1));}, Swedish: function(cs){return new Arr(new Suffix("suédois", Editor.concretes["EditorFre"].rule("_100", cs)), new Int(0));}, Tree: function(cs){return new Arr(new Suffix("arbre", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(0));}, Undo: function(cs){return new Arr(new Suffix("annul", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Wrap: function(cs){return new Arr(new Suffix("emball", Editor.concretes["EditorFre"].rule("_95", cs)), new Int(0));}, Wrapper: function(cs){return new Arr(new Suffix("emballage", Editor.concretes["EditorFre"].rule("_8", cs)), new Int(1));}, _100: function(cs){return new Arr(new Str(""), new Str(""));}, _103: function(cs){return new Arr(new Str("le"), new Str("le"), new Str("du"), new Str("au"), new Str("le"));}, _104: function(cs){return new Seq(new Str("de"), new Str("la"));}, _105: function(cs){return new Seq(new Str("Ã"), new Str("la"));}, _106: function(cs){return new Arr(new Str("la"), new Str("la"), Editor.concretes["EditorFre"].rule("_104", cs), Editor.concretes["EditorFre"].rule("_105", cs), new Str("la"));}, _107: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_103", cs), Editor.concretes["EditorFre"].rule("_106", cs));}, _108: function(cs){return new Arr(new Str("les"), new Str("les"), new Str("des"), new Str("aux"), new Str("les"));}, _109: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_108", cs), Editor.concretes["EditorFre"].rule("_108", cs));}, _11: function(cs){return new Seq();}, _110: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_107", cs), Editor.concretes["EditorFre"].rule("_109", cs));}, _111: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_110", cs), Editor.concretes["EditorFre"].rule("_110", cs));}, _112: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_111", cs));}, _12: function(cs){return new Arr(new Str("me"), new Str("te"), new Str("le"), new Str("nous"), new Str("vous"), new Str("les"), new Str("me"), new Str("te"), new Str("la"), new Str("nous"), new Str("vous"), new Str("les"), new Str("se"), Editor.concretes["EditorFre"].rule("_11", cs));}, _121: function(cs){return cs[1].sel(new Int(1));}, _123: function(cs){return new Arr(new Int(1), new Int(3));}, _124: function(cs){return Editor.concretes["EditorFre"].rule("_123", cs).sel(Editor.concretes["EditorFre"].rule("_121", cs));}, _125: function(cs){return Editor.concretes["EditorFre"].rule("_43", cs).sel(Editor.concretes["EditorFre"].rule("_124", cs));}, _13: function(cs){return new Arr(new Int(2), new Int(8));}, _14: function(cs){return cs[2].sel(new Int(1));}, _140: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs));}, _141: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_140", cs), Editor.concretes["EditorFre"].rule("_140", cs));}, _142: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_141", cs), Editor.concretes["EditorFre"].rule("_141", cs));}, _143: function(cs){return new Seq(new Str("d'"), new Str("un"));}, _144: function(cs){return new Seq(new Str("Ã"), new Str("un"));}, _145: function(cs){return new Arr(new Str("un"), new Str("un"), Editor.concretes["EditorFre"].rule("_143", cs), Editor.concretes["EditorFre"].rule("_144", cs), new Str("un"));}, _146: function(cs){return new Seq(new Str("d'"), new Str("une"));}, _147: function(cs){return new Seq(new Str("Ã"), new Str("une"));}, _148: function(cs){return new Arr(new Str("une"), new Str("une"), Editor.concretes["EditorFre"].rule("_146", cs), Editor.concretes["EditorFre"].rule("_147", cs), new Str("une"));}, _149: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_145", cs), Editor.concretes["EditorFre"].rule("_148", cs));}, _15: function(cs){return Editor.concretes["EditorFre"].rule("_13", cs).sel(Editor.concretes["EditorFre"].rule("_14", cs));}, _150: function(cs){return new Seq(new Str("Ã"), new Str("des"));}, _151: function(cs){return new Arr(new Str("des"), new Str("des"), new Str("de"), Editor.concretes["EditorFre"].rule("_150", cs), new Str("des"));}, _152: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_151", cs), Editor.concretes["EditorFre"].rule("_151", cs));}, _153: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_149", cs), Editor.concretes["EditorFre"].rule("_152", cs));}, _154: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_142", cs), Editor.concretes["EditorFre"].rule("_153", cs));}, _155: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_154", cs));}, _16: function(cs){return new Arr(new Int(12), new Int(13));}, _163: function(cs){return new Arr(new Str(""), new Str("s"), new Str("e"), new Str("es"), new Str("ement"));}, _165: function(cs){return new Seq(new Str("plus"), new Str("prochain"));}, _166: function(cs){return new Seq(new Str("plus"), new Str("prochains"));}, _167: function(cs){return new Seq(new Str("plus"), new Str("prochaine"));}, _168: function(cs){return new Seq(new Str("plus"), new Str("prochaines"));}, _169: function(cs){return new Seq(new Str("plus"), new Str("prochainement"));}, _17: function(cs){return new Arr(new Int(1), new Int(1), new Int(0));}, _170: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_165", cs), Editor.concretes["EditorFre"].rule("_166", cs), Editor.concretes["EditorFre"].rule("_167", cs), Editor.concretes["EditorFre"].rule("_168", cs), Editor.concretes["EditorFre"].rule("_169", cs));}, _18: function(cs){return cs[0].sel(new Int(1));}, _184: function(cs){return new Seq(new Str("plus"), new Str("précédent"));}, _185: function(cs){return new Seq(new Str("plus"), new Str("précédents"));}, _186: function(cs){return new Seq(new Str("plus"), new Str("précédente"));}, _187: function(cs){return new Seq(new Str("plus"), new Str("précédentes"));}, _188: function(cs){return new Seq(new Str("plus"), new Str("précédentement"));}, _189: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_184", cs), Editor.concretes["EditorFre"].rule("_185", cs), Editor.concretes["EditorFre"].rule("_186", cs), Editor.concretes["EditorFre"].rule("_187", cs), Editor.concretes["EditorFre"].rule("_188", cs));}, _19: function(cs){return Editor.concretes["EditorFre"].rule("_17", cs).sel(Editor.concretes["EditorFre"].rule("_18", cs));}, _2: function(cs){return new Seq(new Str("plus"), new Str("disponible"));}, _20: function(cs){return Editor.concretes["EditorFre"].rule("_16", cs).sel(Editor.concretes["EditorFre"].rule("_19", cs));}, _21: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_15", cs), Editor.concretes["EditorFre"].rule("_20", cs));}, _22: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_20", cs), Editor.concretes["EditorFre"].rule("_20", cs));}, _229: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0], cs[0]);}, _23: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_21", cs), Editor.concretes["EditorFre"].rule("_22", cs));}, _232: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_229", cs), Editor.concretes["EditorFre"].rule("_229", cs));}, _233: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_232", cs), Editor.concretes["EditorFre"].rule("_232", cs));}, _24: function(cs){return new Arr(new Int(1), new Int(0));}, _25: function(cs){return Editor.concretes["EditorFre"].rule("_24", cs).sel(new Int(0));}, _26: function(cs){return Editor.concretes["EditorFre"].rule("_23", cs).sel(Editor.concretes["EditorFre"].rule("_25", cs));}, _27: function(cs){return Editor.concretes["EditorFre"].rule("_24", cs).sel(new Int(1));}, _28: function(cs){return Editor.concretes["EditorFre"].rule("_26", cs).sel(Editor.concretes["EditorFre"].rule("_27", cs));}, _29: function(cs){return Editor.concretes["EditorFre"].rule("_12", cs).sel(Editor.concretes["EditorFre"].rule("_28", cs));}, _3: function(cs){return new Seq(new Str("plus"), new Str("disponibles"));}, _30: function(cs){return new Seq(new Str("me"), Editor.concretes["EditorFre"].rule("_29", cs));}, _31: function(cs){return new Seq(new Str("te"), Editor.concretes["EditorFre"].rule("_29", cs));}, _32: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_29", cs), new Str("lui"));}, _33: function(cs){return new Seq(new Str("nous"), Editor.concretes["EditorFre"].rule("_29", cs));}, _34: function(cs){return new Seq(new Str("vous"), Editor.concretes["EditorFre"].rule("_29", cs));}, _35: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_29", cs), new Str("leur"));}, _36: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_30", cs), Editor.concretes["EditorFre"].rule("_31", cs), Editor.concretes["EditorFre"].rule("_32", cs), Editor.concretes["EditorFre"].rule("_33", cs), Editor.concretes["EditorFre"].rule("_34", cs), Editor.concretes["EditorFre"].rule("_35", cs), Editor.concretes["EditorFre"].rule("_30", cs), Editor.concretes["EditorFre"].rule("_31", cs), Editor.concretes["EditorFre"].rule("_32", cs), Editor.concretes["EditorFre"].rule("_33", cs), Editor.concretes["EditorFre"].rule("_34", cs), Editor.concretes["EditorFre"].rule("_35", cs), Editor.concretes["EditorFre"].rule("_29", cs), Editor.concretes["EditorFre"].rule("_29", cs));}, _37: function(cs){return new Arr(new Int(13), new Int(13));}, _38: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_37", cs), Editor.concretes["EditorFre"].rule("_37", cs));}, _39: function(cs){return Editor.concretes["EditorFre"].rule("_38", cs).sel(Editor.concretes["EditorFre"].rule("_25", cs));}, _4: function(cs){return new Seq(new Str("plus"), new Str("disponiblement"));}, _40: function(cs){return Editor.concretes["EditorFre"].rule("_39", cs).sel(Editor.concretes["EditorFre"].rule("_27", cs));}, _41: function(cs){return Editor.concretes["EditorFre"].rule("_36", cs).sel(Editor.concretes["EditorFre"].rule("_40", cs));}, _42: function(cs){return cs[0].sel(new Int(0));}, _43: function(cs){return Editor.concretes["EditorFre"].rule("_42", cs).sel(new Int(0));}, _44: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_11", cs));}, _45: function(cs){return Editor.concretes["EditorFre"].rule("_44", cs).sel(Editor.concretes["EditorFre"].rule("_40", cs));}, _46: function(cs){return cs[1].sel(new Int(0));}, _47: function(cs){return Editor.concretes["EditorFre"].rule("_46", cs).sel(new Int(1));}, _48: function(cs){return Editor.concretes["EditorFre"].rule("_47", cs).sel(new Int(0));}, _49: function(cs){return Editor.concretes["EditorFre"].rule("_48", cs).sel(Editor.concretes["EditorFre"].rule("_14", cs));}, _5: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_2", cs), Editor.concretes["EditorFre"].rule("_3", cs), Editor.concretes["EditorFre"].rule("_2", cs), Editor.concretes["EditorFre"].rule("_3", cs), Editor.concretes["EditorFre"].rule("_4", cs));}, _50: function(cs){return Editor.concretes["EditorFre"].rule("_49", cs).sel(new Int(1));}, _51: function(cs){return cs[2].sel(new Int(0));}, _52: function(cs){return Editor.concretes["EditorFre"].rule("_51", cs).sel(new Int(0));}, _53: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_50", cs), Editor.concretes["EditorFre"].rule("_52", cs));}, _54: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_11", cs), Editor.concretes["EditorFre"].rule("_53", cs));}, _55: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_53", cs), Editor.concretes["EditorFre"].rule("_53", cs));}, _56: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_54", cs), Editor.concretes["EditorFre"].rule("_55", cs));}, _57: function(cs){return Editor.concretes["EditorFre"].rule("_56", cs).sel(Editor.concretes["EditorFre"].rule("_25", cs));}, _58: function(cs){return Editor.concretes["EditorFre"].rule("_57", cs).sel(Editor.concretes["EditorFre"].rule("_27", cs));}, _61: function(cs){return cs[3].sel(new Int(1));}, _62: function(cs){return Editor.concretes["EditorFre"].rule("_13", cs).sel(Editor.concretes["EditorFre"].rule("_61", cs));}, _63: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_62", cs), Editor.concretes["EditorFre"].rule("_20", cs));}, _64: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_63", cs), Editor.concretes["EditorFre"].rule("_22", cs));}, _65: function(cs){return Editor.concretes["EditorFre"].rule("_64", cs).sel(Editor.concretes["EditorFre"].rule("_25", cs));}, _66: function(cs){return Editor.concretes["EditorFre"].rule("_65", cs).sel(Editor.concretes["EditorFre"].rule("_27", cs));}, _67: function(cs){return Editor.concretes["EditorFre"].rule("_12", cs).sel(Editor.concretes["EditorFre"].rule("_66", cs));}, _68: function(cs){return new Seq(new Str("me"), Editor.concretes["EditorFre"].rule("_67", cs));}, _69: function(cs){return new Seq(new Str("te"), Editor.concretes["EditorFre"].rule("_67", cs));}, _70: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_67", cs), new Str("lui"));}, _71: function(cs){return new Seq(new Str("nous"), Editor.concretes["EditorFre"].rule("_67", cs));}, _72: function(cs){return new Seq(new Str("vous"), Editor.concretes["EditorFre"].rule("_67", cs));}, _73: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_67", cs), new Str("leur"));}, _76: function(cs){return Editor.concretes["EditorFre"].rule("_48", cs).sel(Editor.concretes["EditorFre"].rule("_61", cs));}, _77: function(cs){return Editor.concretes["EditorFre"].rule("_76", cs).sel(new Int(1));}, _78: function(cs){return new Arr(new Int(0), new Int(2));}, _79: function(cs){return Editor.concretes["EditorFre"].rule("_78", cs).sel(Editor.concretes["EditorFre"].rule("_61", cs));}, _8: function(cs){return new Arr(new Str(""), new Str("s"));}, _80: function(cs){return Editor.concretes["EditorFre"].rule("_52", cs).sel(Editor.concretes["EditorFre"].rule("_79", cs));}, _81: function(cs){return cs[3].sel(new Int(0));}, _82: function(cs){return Editor.concretes["EditorFre"].rule("_81", cs).sel(new Int(0));}, _83: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_80", cs), Editor.concretes["EditorFre"].rule("_82", cs));}, _84: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_82", cs), Editor.concretes["EditorFre"].rule("_80", cs));}, _85: function(cs){return new Arr(Editor.concretes["EditorFre"].rule("_83", cs), Editor.concretes["EditorFre"].rule("_84", cs));}, _86: function(cs){return Editor.concretes["EditorFre"].rule("_85", cs).sel(Editor.concretes["EditorFre"].rule("_14", cs));}, _87: function(cs){return new Seq(Editor.concretes["EditorFre"].rule("_77", cs), Editor.concretes["EditorFre"].rule("_86", cs));}, _95: function(cs){return new Arr(new Str("er"), new Str("er"), new Str("e"), new Str("es"), new Str("e"), new Str("ons"), new Str("ez"), new Str("ent"), new Str("e"), new Str("es"), new Str("e"), new Str("ions"), new Str("iez"), new Str("ent"), new Str("e"), new Str("ons"), new Str("ez"), new Str("é"), new Str("és"), new Str("ée"), new Str("ées"), new Str("ant"));}, Adjective: function(cs){return new Arr(new Arr(Editor.concretes["EditorFre"].rule("_229", cs), Editor.concretes["EditorFre"].rule("_229", cs), Editor.concretes["EditorFre"].rule("_229", cs)), new Int(0));}, Determiner: function(cs){return new Arr(new Arr(Editor.concretes["EditorFre"].rule("_233", cs), Editor.concretes["EditorFre"].rule("_233", cs)));}, Noun: function(cs){return new Arr(new Arr(cs[0], cs[0]), new Int(0));}, Sentence: function(cs){return new Arr(cs[0]);}, Verb: function(cs){return new Arr(new Arr(cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0]), new Int(0));}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}, new Parser("Sentence",[new Rule(23, new FunApp("Wrapper",[]),[],[[new Terminal("emballage")]]), new Rule(87, new FunApp("Wrapper",[]),[],[[new Terminal("emballages")]]), new Rule(20, new FunApp("Wrap",[]),[],[[new Terminal("emballer")]]), new Rule(47, new FunApp("Wrap",[]),[],[[new Terminal("emballer")]]), new Rule(46, new FunApp("Wrap",[]),[],[[new Terminal("emballe")]]), new Rule(45, new FunApp("Wrap",[]),[],[[new Terminal("emballes")]]), new Rule(44, new FunApp("Wrap",[]),[],[[new Terminal("emballe")]]), new Rule(43, new FunApp("Wrap",[]),[],[[new Terminal("emballons")]]), new Rule(42, new FunApp("Wrap",[]),[],[[new Terminal("emballez")]]), new Rule(41, new FunApp("Wrap",[]),[],[[new Terminal("emballent")]]), new Rule(40, new FunApp("Wrap",[]),[],[[new Terminal("emballe")]]), new Rule(39, new FunApp("Wrap",[]),[],[[new Terminal("emballes")]]), new Rule(38, new FunApp("Wrap",[]),[],[[new Terminal("emballe")]]), new Rule(37, new FunApp("Wrap",[]),[],[[new Terminal("emballions")]]), new Rule(36, new FunApp("Wrap",[]),[],[[new Terminal("emballiez")]]), new Rule(35, new FunApp("Wrap",[]),[],[[new Terminal("emballent")]]), new Rule(34, new FunApp("Wrap",[]),[],[[new Terminal("emballe")]]), new Rule(33, new FunApp("Wrap",[]),[],[[new Terminal("emballons")]]), new Rule(32, new FunApp("Wrap",[]),[],[[new Terminal("emballez")]]), new Rule(31, new FunApp("Wrap",[]),[],[[new Terminal("emballé")]]), new Rule(30, new FunApp("Wrap",[]),[],[[new Terminal("emballés")]]), new Rule(29, new FunApp("Wrap",[]),[],[[new Terminal("emballée")]]), new Rule(28, new FunApp("Wrap",[]),[],[[new Terminal("emballées")]]), new Rule(27, new FunApp("Wrap",[]),[],[[new Terminal("emballant")]]), new Rule(20, new FunApp("Undo",[]),[],[[new Terminal("annuler")]]), new Rule(47, new FunApp("Undo",[]),[],[[new Terminal("annuler")]]), new Rule(46, new FunApp("Undo",[]),[],[[new Terminal("annule")]]), new Rule(45, new FunApp("Undo",[]),[],[[new Terminal("annules")]]), new Rule(44, new FunApp("Undo",[]),[],[[new Terminal("annule")]]), new Rule(43, new FunApp("Undo",[]),[],[[new Terminal("annulons")]]), new Rule(42, new FunApp("Undo",[]),[],[[new Terminal("annulez")]]), new Rule(41, new FunApp("Undo",[]),[],[[new Terminal("annulent")]]), new Rule(40, new FunApp("Undo",[]),[],[[new Terminal("annule")]]), new Rule(39, new FunApp("Undo",[]),[],[[new Terminal("annules")]]), new Rule(38, new FunApp("Undo",[]),[],[[new Terminal("annule")]]), new Rule(37, new FunApp("Undo",[]),[],[[new Terminal("annulions")]]), new Rule(36, new FunApp("Undo",[]),[],[[new Terminal("annuliez")]]), new Rule(35, new FunApp("Undo",[]),[],[[new Terminal("annulent")]]), new Rule(34, new FunApp("Undo",[]),[],[[new Terminal("annule")]]), new Rule(33, new FunApp("Undo",[]),[],[[new Terminal("annulons")]]), new Rule(32, new FunApp("Undo",[]),[],[[new Terminal("annulez")]]), new Rule(31, new FunApp("Undo",[]),[],[[new Terminal("annulé")]]), new Rule(30, new FunApp("Undo",[]),[],[[new Terminal("annulés")]]), new Rule(29, new FunApp("Undo",[]),[],[[new Terminal("annulée")]]), new Rule(28, new FunApp("Undo",[]),[],[[new Terminal("annulées")]]), new Rule(27, new FunApp("Undo",[]),[],[[new Terminal("annulant")]]), new Rule(17, new FunApp("Tree",[]),[],[[new Terminal("arbre")]]), new Rule(16, new FunApp("Tree",[]),[],[[new Terminal("arbres")]]), new Rule(17, new FunApp("Swedish",[]),[],[[new Terminal("suédois")]]), new Rule(16, new FunApp("Swedish",[]),[],[[new Terminal("suédois")]]), new Rule(23, new FunApp("String_N",[]),[],[[new Terminal("chaîne"), new Terminal("de"), new Terminal("charactères")]]), new Rule(87, new FunApp("String_N",[]),[],[[new Terminal("chaînes"), new Terminal("de"), new Terminal("charactères")]]), new Rule(17, new FunApp("Spanish",[]),[],[[new Terminal("espagnol")]]), new Rule(16, new FunApp("Spanish",[]),[],[[new Terminal("espagnols")]]), new Rule(18, new FunApp("SingleWordCommand",[new Arg(0)]),[22],[[new Terminal("s'"), new ArgProj(0, 0)]]), new Rule(18, new FunApp("SingleWordCommand",[new Arg(0)]),[22],[[new Terminal("se"), new ArgProj(0, 0)]]), new Rule(18, new FunApp("SingleWordCommand",[new Arg(0)]),[21],[[new ArgProj(0, 0)]]), new Rule(18, new FunApp("SingleWordCommand",[new Arg(0)]),[20],[[new ArgProj(0, 0)]]), new Rule(20, new FunApp("Show",[]),[],[[new Terminal("montrer")]]), new Rule(47, new FunApp("Show",[]),[],[[new Terminal("montrer")]]), new Rule(46, new FunApp("Show",[]),[],[[new Terminal("montre")]]), new Rule(45, new FunApp("Show",[]),[],[[new Terminal("montres")]]), new Rule(44, new FunApp("Show",[]),[],[[new Terminal("montre")]]), new Rule(43, new FunApp("Show",[]),[],[[new Terminal("montrons")]]), new Rule(42, new FunApp("Show",[]),[],[[new Terminal("montrez")]]), new Rule(41, new FunApp("Show",[]),[],[[new Terminal("montrent")]]), new Rule(40, new FunApp("Show",[]),[],[[new Terminal("montre")]]), new Rule(39, new FunApp("Show",[]),[],[[new Terminal("montres")]]), new Rule(38, new FunApp("Show",[]),[],[[new Terminal("montre")]]), new Rule(37, new FunApp("Show",[]),[],[[new Terminal("montrions")]]), new Rule(36, new FunApp("Show",[]),[],[[new Terminal("montriez")]]), new Rule(35, new FunApp("Show",[]),[],[[new Terminal("montrent")]]), new Rule(34, new FunApp("Show",[]),[],[[new Terminal("montre")]]), new Rule(33, new FunApp("Show",[]),[],[[new Terminal("montrons")]]), new Rule(32, new FunApp("Show",[]),[],[[new Terminal("montrez")]]), new Rule(31, new FunApp("Show",[]),[],[[new Terminal("montré")]]), new Rule(30, new FunApp("Show",[]),[],[[new Terminal("montrés")]]), new Rule(29, new FunApp("Show",[]),[],[[new Terminal("montrée")]]), new Rule(28, new FunApp("Show",[]),[],[[new Terminal("montrées")]]), new Rule(27, new FunApp("Show",[]),[],[[new Terminal("montrant")]]), new Rule(20, new FunApp("Select",[]),[],[[new Terminal("selectionner")]]), new Rule(47, new FunApp("Select",[]),[],[[new Terminal("selectionner")]]), new Rule(46, new FunApp("Select",[]),[],[[new Terminal("selectionne")]]), new Rule(45, new FunApp("Select",[]),[],[[new Terminal("selectionnes")]]), new Rule(44, new FunApp("Select",[]),[],[[new Terminal("selectionne")]]), new Rule(43, new FunApp("Select",[]),[],[[new Terminal("selectionnons")]]), new Rule(42, new FunApp("Select",[]),[],[[new Terminal("selectionnez")]]), new Rule(41, new FunApp("Select",[]),[],[[new Terminal("selectionnent")]]), new Rule(40, new FunApp("Select",[]),[],[[new Terminal("selectionne")]]), new Rule(39, new FunApp("Select",[]),[],[[new Terminal("selectionnes")]]), new Rule(38, new FunApp("Select",[]),[],[[new Terminal("selectionne")]]), new Rule(37, new FunApp("Select",[]),[],[[new Terminal("selectionnions")]]), new Rule(36, new FunApp("Select",[]),[],[[new Terminal("selectionniez")]]), new Rule(35, new FunApp("Select",[]),[],[[new Terminal("selectionnent")]]), new Rule(34, new FunApp("Select",[]),[],[[new Terminal("selectionne")]]), new Rule(33, new FunApp("Select",[]),[],[[new Terminal("selectionnons")]]), new Rule(32, new FunApp("Select",[]),[],[[new Terminal("selectionnez")]]), new Rule(31, new FunApp("Select",[]),[],[[new Terminal("selectionné")]]), new Rule(30, new FunApp("Select",[]),[],[[new Terminal("selectionnés")]]), new Rule(29, new FunApp("Select",[]),[],[[new Terminal("selectionnée")]]), new Rule(28, new FunApp("Select",[]),[],[[new Terminal("selectionnées")]]), new Rule(27, new FunApp("Select",[]),[],[[new Terminal("selectionnant")]]), new Rule(23, new FunApp("Russian",[]),[],[[new Terminal("russe")]]), new Rule(87, new FunApp("Russian",[]),[],[[new Terminal("russes")]]), new Rule(20, new FunApp("Replace",[]),[],[[new Terminal("remplacer")]]), new Rule(47, new FunApp("Replace",[]),[],[[new Terminal("remplacer")]]), new Rule(46, new FunApp("Replace",[]),[],[[new Terminal("remplace")]]), new Rule(45, new FunApp("Replace",[]),[],[[new Terminal("remplaces")]]), new Rule(44, new FunApp("Replace",[]),[],[[new Terminal("remplace")]]), new Rule(43, new FunApp("Replace",[]),[],[[new Terminal("remplaçons")]]), new Rule(42, new FunApp("Replace",[]),[],[[new Terminal("remplacez")]]), new Rule(41, new FunApp("Replace",[]),[],[[new Terminal("remplacent")]]), new Rule(40, new FunApp("Replace",[]),[],[[new Terminal("remplace")]]), new Rule(39, new FunApp("Replace",[]),[],[[new Terminal("remplaces")]]), new Rule(38, new FunApp("Replace",[]),[],[[new Terminal("remplace")]]), new Rule(37, new FunApp("Replace",[]),[],[[new Terminal("remplacions")]]), new Rule(36, new FunApp("Replace",[]),[],[[new Terminal("remplaciez")]]), new Rule(35, new FunApp("Replace",[]),[],[[new Terminal("remplacent")]]), new Rule(34, new FunApp("Replace",[]),[],[[new Terminal("remplace")]]), new Rule(33, new FunApp("Replace",[]),[],[[new Terminal("remplaçons")]]), new Rule(32, new FunApp("Replace",[]),[],[[new Terminal("remplacez")]]), new Rule(31, new FunApp("Replace",[]),[],[[new Terminal("remplacé")]]), new Rule(30, new FunApp("Replace",[]),[],[[new Terminal("remplacés")]]), new Rule(29, new FunApp("Replace",[]),[],[[new Terminal("remplacée")]]), new Rule(28, new FunApp("Replace",[]),[],[[new Terminal("remplacées")]]), new Rule(27, new FunApp("Replace",[]),[],[[new Terminal("remplaçant")]]), new Rule(17, new FunApp("Refinement",[]),[],[[new Terminal("raffinement")]]), new Rule(16, new FunApp("Refinement",[]),[],[[new Terminal("raffinements")]]), new Rule(20, new FunApp("Refine",[]),[],[[new Terminal("raffiner")]]), new Rule(47, new FunApp("Refine",[]),[],[[new Terminal("raffiner")]]), new Rule(46, new FunApp("Refine",[]),[],[[new Terminal("raffine")]]), new Rule(45, new FunApp("Refine",[]),[],[[new Terminal("raffines")]]), new Rule(44, new FunApp("Refine",[]),[],[[new Terminal("raffine")]]), new Rule(43, new FunApp("Refine",[]),[],[[new Terminal("raffinons")]]), new Rule(42, new FunApp("Refine",[]),[],[[new Terminal("raffinez")]]), new Rule(41, new FunApp("Refine",[]),[],[[new Terminal("raffinent")]]), new Rule(40, new FunApp("Refine",[]),[],[[new Terminal("raffine")]]), new Rule(39, new FunApp("Refine",[]),[],[[new Terminal("raffines")]]), new Rule(38, new FunApp("Refine",[]),[],[[new Terminal("raffine")]]), new Rule(37, new FunApp("Refine",[]),[],[[new Terminal("raffinions")]]), new Rule(36, new FunApp("Refine",[]),[],[[new Terminal("raffiniez")]]), new Rule(35, new FunApp("Refine",[]),[],[[new Terminal("raffinent")]]), new Rule(34, new FunApp("Refine",[]),[],[[new Terminal("raffine")]]), new Rule(33, new FunApp("Refine",[]),[],[[new Terminal("raffinons")]]), new Rule(32, new FunApp("Refine",[]),[],[[new Terminal("raffinez")]]), new Rule(31, new FunApp("Refine",[]),[],[[new Terminal("raffiné")]]), new Rule(30, new FunApp("Refine",[]),[],[[new Terminal("raffinés")]]), new Rule(29, new FunApp("Refine",[]),[],[[new Terminal("raffinée")]]), new Rule(28, new FunApp("Refine",[]),[],[[new Terminal("raffinées")]]), new Rule(27, new FunApp("Refine",[]),[],[[new Terminal("raffinant")]]), new Rule(20, new FunApp("Redo",[]),[],[[new Terminal("refaire")]]), new Rule(47, new FunApp("Redo",[]),[],[[new Terminal("refaire")]]), new Rule(46, new FunApp("Redo",[]),[],[[new Terminal("refais")]]), new Rule(45, new FunApp("Redo",[]),[],[[new Terminal("refais")]]), new Rule(44, new FunApp("Redo",[]),[],[[new Terminal("refait")]]), new Rule(43, new FunApp("Redo",[]),[],[[new Terminal("refaisons")]]), new Rule(42, new FunApp("Redo",[]),[],[[new Terminal("refaites")]]), new Rule(41, new FunApp("Redo",[]),[],[[new Terminal("refont")]]), new Rule(40, new FunApp("Redo",[]),[],[[new Terminal("refasse")]]), new Rule(39, new FunApp("Redo",[]),[],[[new Terminal("refasses")]]), new Rule(38, new FunApp("Redo",[]),[],[[new Terminal("refasse")]]), new Rule(37, new FunApp("Redo",[]),[],[[new Terminal("refassions")]]), new Rule(36, new FunApp("Redo",[]),[],[[new Terminal("refassiez")]]), new Rule(35, new FunApp("Redo",[]),[],[[new Terminal("refassent")]]), new Rule(34, new FunApp("Redo",[]),[],[[new Terminal("refais")]]), new Rule(33, new FunApp("Redo",[]),[],[[new Terminal("refaisons")]]), new Rule(32, new FunApp("Redo",[]),[],[[new Terminal("refaites")]]), new Rule(31, new FunApp("Redo",[]),[],[[new Terminal("refait")]]), new Rule(30, new FunApp("Redo",[]),[],[[new Terminal("refaits")]]), new Rule(29, new FunApp("Redo",[]),[],[[new Terminal("refaite")]]), new Rule(28, new FunApp("Redo",[]),[],[[new Terminal("refaites")]]), new Rule(27, new FunApp("Redo",[]),[],[[new Terminal("refaisant")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[22, 24, 23],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[22, 24, 23],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[21, 24, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[20, 24, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[22, 19, 17],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[22, 19, 17],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[21, 19, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[20, 19, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aléatoirement")]]), new Rule(15, new FunApp("Previous",[]),[],[[new Terminal("précédent")]]), new Rule(14, new FunApp("Previous",[]),[],[[new Terminal("précédents")]]), new Rule(13, new FunApp("Previous",[]),[],[[new Terminal("précédente")]]), new Rule(12, new FunApp("Previous",[]),[],[[new Terminal("précédentes")]]), new Rule(11, new FunApp("Previous",[]),[],[[new Terminal("précédentement")]]), new Rule(10, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédent")]]), new Rule(9, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédents")]]), new Rule(8, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédente")]]), new Rule(7, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédentes")]]), new Rule(6, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédentement")]]), new Rule(5, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédent")]]), new Rule(4, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédents")]]), new Rule(3, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédente")]]), new Rule(2, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédentes")]]), new Rule(1, new FunApp("Previous",[]),[],[[new Terminal("plus"), new Terminal("précédentement")]]), new Rule(20, new FunApp("Paste",[]),[],[[new Terminal("coller")]]), new Rule(47, new FunApp("Paste",[]),[],[[new Terminal("coller")]]), new Rule(46, new FunApp("Paste",[]),[],[[new Terminal("colle")]]), new Rule(45, new FunApp("Paste",[]),[],[[new Terminal("colles")]]), new Rule(44, new FunApp("Paste",[]),[],[[new Terminal("colle")]]), new Rule(43, new FunApp("Paste",[]),[],[[new Terminal("collons")]]), new Rule(42, new FunApp("Paste",[]),[],[[new Terminal("collez")]]), new Rule(41, new FunApp("Paste",[]),[],[[new Terminal("collent")]]), new Rule(40, new FunApp("Paste",[]),[],[[new Terminal("colle")]]), new Rule(39, new FunApp("Paste",[]),[],[[new Terminal("colles")]]), new Rule(38, new FunApp("Paste",[]),[],[[new Terminal("colle")]]), new Rule(37, new FunApp("Paste",[]),[],[[new Terminal("collions")]]), new Rule(36, new FunApp("Paste",[]),[],[[new Terminal("colliez")]]), new Rule(35, new FunApp("Paste",[]),[],[[new Terminal("collent")]]), new Rule(34, new FunApp("Paste",[]),[],[[new Terminal("colle")]]), new Rule(33, new FunApp("Paste",[]),[],[[new Terminal("collons")]]), new Rule(32, new FunApp("Paste",[]),[],[[new Terminal("collez")]]), new Rule(31, new FunApp("Paste",[]),[],[[new Terminal("collé")]]), new Rule(30, new FunApp("Paste",[]),[],[[new Terminal("collés")]]), new Rule(29, new FunApp("Paste",[]),[],[[new Terminal("collée")]]), new Rule(28, new FunApp("Paste",[]),[],[[new Terminal("collées")]]), new Rule(27, new FunApp("Paste",[]),[],[[new Terminal("collant")]]), new Rule(20, new FunApp("Parse",[]),[],[[new Terminal("analyser")]]), new Rule(47, new FunApp("Parse",[]),[],[[new Terminal("analyser")]]), new Rule(46, new FunApp("Parse",[]),[],[[new Terminal("analyse")]]), new Rule(45, new FunApp("Parse",[]),[],[[new Terminal("analyses")]]), new Rule(44, new FunApp("Parse",[]),[],[[new Terminal("analyse")]]), new Rule(43, new FunApp("Parse",[]),[],[[new Terminal("analysons")]]), new Rule(42, new FunApp("Parse",[]),[],[[new Terminal("analysez")]]), new Rule(41, new FunApp("Parse",[]),[],[[new Terminal("analysent")]]), new Rule(40, new FunApp("Parse",[]),[],[[new Terminal("analyse")]]), new Rule(39, new FunApp("Parse",[]),[],[[new Terminal("analyses")]]), new Rule(38, new FunApp("Parse",[]),[],[[new Terminal("analyse")]]), new Rule(37, new FunApp("Parse",[]),[],[[new Terminal("analysions")]]), new Rule(36, new FunApp("Parse",[]),[],[[new Terminal("analysiez")]]), new Rule(35, new FunApp("Parse",[]),[],[[new Terminal("analysent")]]), new Rule(34, new FunApp("Parse",[]),[],[[new Terminal("analyse")]]), new Rule(33, new FunApp("Parse",[]),[],[[new Terminal("analysons")]]), new Rule(32, new FunApp("Parse",[]),[],[[new Terminal("analysez")]]), new Rule(31, new FunApp("Parse",[]),[],[[new Terminal("analysé")]]), new Rule(30, new FunApp("Parse",[]),[],[[new Terminal("analysés")]]), new Rule(29, new FunApp("Parse",[]),[],[[new Terminal("analysée")]]), new Rule(28, new FunApp("Parse",[]),[],[[new Terminal("analysées")]]), new Rule(27, new FunApp("Parse",[]),[],[[new Terminal("analysant")]]), new Rule(23, new FunApp("Page",[]),[],[[new Terminal("page")]]), new Rule(87, new FunApp("Page",[]),[],[[new Terminal("pages")]]), new Rule(17, new FunApp("Norwegian",[]),[],[[new Terminal("norvégien")]]), new Rule(16, new FunApp("Norwegian",[]),[],[[new Terminal("norvégiens")]]), new Rule(17, new FunApp("Node",[]),[],[[new Terminal("noeud")]]), new Rule(16, new FunApp("Node",[]),[],[[new Terminal("noeuds")]]), new Rule(15, new FunApp("Next",[]),[],[[new Terminal("prochain")]]), new Rule(14, new FunApp("Next",[]),[],[[new Terminal("prochains")]]), new Rule(13, new FunApp("Next",[]),[],[[new Terminal("prochaine")]]), new Rule(12, new FunApp("Next",[]),[],[[new Terminal("prochaines")]]), new Rule(11, new FunApp("Next",[]),[],[[new Terminal("prochainement")]]), new Rule(10, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochain")]]), new Rule(9, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochains")]]), new Rule(8, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochaine")]]), new Rule(7, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochaines")]]), new Rule(6, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochainement")]]), new Rule(5, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochain")]]), new Rule(4, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochains")]]), new Rule(3, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochaine")]]), new Rule(2, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochaines")]]), new Rule(1, new FunApp("Next",[]),[],[[new Terminal("plus"), new Terminal("prochainement")]]), new Rule(23, new FunApp("Language",[]),[],[[new Terminal("langue")]]), new Rule(87, new FunApp("Language",[]),[],[[new Terminal("langues")]]), new Rule(18, new FunApp("Label",[new Arg(0)]),[89],[[new ArgProj(0, 0)]]), new Rule(89, new Arg(0),[23],[[new ArgProj(0, 0)]]), new Rule(89, new Arg(0),[17],[[new ArgProj(0, 0)]]), new Rule(17, new FunApp("Italian",[]),[],[[new Terminal("italien")]]), new Rule(16, new FunApp("Italian",[]),[],[[new Terminal("italiens")]]), new Rule(17, new FunApp("Integer_N",[]),[],[[new Terminal("entier")]]), new Rule(16, new FunApp("Integer_N",[]),[],[[new Terminal("entiers")]]), new Rule(85, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(84, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(83, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(82, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(81, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(80, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(79, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(78, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(77, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(76, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(75, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(74, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(73, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(72, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(71, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(70, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(69, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(68, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(67, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(66, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(65, new FunApp("IndefSgDet",[]),[],[[new Terminal("un")]]), new Rule(19, new FunApp("IndefSgDet",[]),[],[[new Terminal("un")]]), new Rule(64, new FunApp("IndefSgDet",[]),[],[[new Terminal("d'"), new Terminal("un")]]), new Rule(63, new FunApp("IndefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("un")]]), new Rule(62, new FunApp("IndefSgDet",[]),[],[[new Terminal("un")]]), new Rule(61, new FunApp("IndefSgDet",[]),[],[[new Terminal("une")]]), new Rule(24, new FunApp("IndefSgDet",[]),[],[[new Terminal("une")]]), new Rule(60, new FunApp("IndefSgDet",[]),[],[[new Terminal("d'"), new Terminal("une")]]), new Rule(59, new FunApp("IndefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("une")]]), new Rule(58, new FunApp("IndefSgDet",[]),[],[[new Terminal("une")]]), new Rule(57, new FunApp("IndefSgDet",[]),[],[[new Terminal("des")]]), new Rule(56, new FunApp("IndefSgDet",[]),[],[[new Terminal("des")]]), new Rule(55, new FunApp("IndefSgDet",[]),[],[[new Terminal("d'")]]), new Rule(55, new FunApp("IndefSgDet",[]),[],[[new Terminal("de")]]), new Rule(54, new FunApp("IndefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("des")]]), new Rule(53, new FunApp("IndefSgDet",[]),[],[[new Terminal("des")]]), new Rule(52, new FunApp("IndefSgDet",[]),[],[[new Terminal("des")]]), new Rule(51, new FunApp("IndefSgDet",[]),[],[[new Terminal("des")]]), new Rule(50, new FunApp("IndefSgDet",[]),[],[[new Terminal("d'")]]), new Rule(50, new FunApp("IndefSgDet",[]),[],[[new Terminal("de")]]), new Rule(49, new FunApp("IndefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("des")]]), new Rule(48, new FunApp("IndefSgDet",[]),[],[[new Terminal("des")]]), new Rule(85, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(84, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(83, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(82, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(81, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(80, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(79, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(78, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(77, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(76, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(75, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(74, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(73, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(72, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(71, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(70, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(69, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(68, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(67, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(66, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(65, new FunApp("IndefPlDet",[]),[],[[new Terminal("un")]]), new Rule(19, new FunApp("IndefPlDet",[]),[],[[new Terminal("un")]]), new Rule(64, new FunApp("IndefPlDet",[]),[],[[new Terminal("d'"), new Terminal("un")]]), new Rule(63, new FunApp("IndefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("un")]]), new Rule(62, new FunApp("IndefPlDet",[]),[],[[new Terminal("un")]]), new Rule(61, new FunApp("IndefPlDet",[]),[],[[new Terminal("une")]]), new Rule(24, new FunApp("IndefPlDet",[]),[],[[new Terminal("une")]]), new Rule(60, new FunApp("IndefPlDet",[]),[],[[new Terminal("d'"), new Terminal("une")]]), new Rule(59, new FunApp("IndefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("une")]]), new Rule(58, new FunApp("IndefPlDet",[]),[],[[new Terminal("une")]]), new Rule(57, new FunApp("IndefPlDet",[]),[],[[new Terminal("des")]]), new Rule(56, new FunApp("IndefPlDet",[]),[],[[new Terminal("des")]]), new Rule(55, new FunApp("IndefPlDet",[]),[],[[new Terminal("d'")]]), new Rule(55, new FunApp("IndefPlDet",[]),[],[[new Terminal("de")]]), new Rule(54, new FunApp("IndefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("des")]]), new Rule(53, new FunApp("IndefPlDet",[]),[],[[new Terminal("des")]]), new Rule(52, new FunApp("IndefPlDet",[]),[],[[new Terminal("des")]]), new Rule(51, new FunApp("IndefPlDet",[]),[],[[new Terminal("des")]]), new Rule(50, new FunApp("IndefPlDet",[]),[],[[new Terminal("d'")]]), new Rule(50, new FunApp("IndefPlDet",[]),[],[[new Terminal("de")]]), new Rule(49, new FunApp("IndefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("des")]]), new Rule(48, new FunApp("IndefPlDet",[]),[],[[new Terminal("des")]]), new Rule(17, new FunApp("German",[]),[],[[new Terminal("allemand")]]), new Rule(16, new FunApp("German",[]),[],[[new Terminal("allemands")]]), new Rule(17, new FunApp("French",[]),[],[[new Terminal("français")]]), new Rule(16, new FunApp("French",[]),[],[[new Terminal("français")]]), new Rule(17, new FunApp("Float_N",[]),[],[[new Terminal("réel")]]), new Rule(16, new FunApp("Float_N",[]),[],[[new Terminal("réels")]]), new Rule(17, new FunApp("Finnish",[]),[],[[new Terminal("finnois")]]), new Rule(16, new FunApp("Finnish",[]),[],[[new Terminal("finnois")]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[12, 87],[[new Terminal("il"), new Terminal("n'"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(1, 0), new ArgProj(0, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[12, 87],[[new Terminal("il"), new Terminal("ne"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(1, 0), new ArgProj(0, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[14, 16],[[new Terminal("il"), new Terminal("n'"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(1, 0), new ArgProj(0, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[14, 16],[[new Terminal("il"), new Terminal("ne"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(1, 0), new ArgProj(0, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[88, 87],[[new Terminal("il"), new Terminal("n'"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[88, 87],[[new Terminal("il"), new Terminal("ne"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[86, 16],[[new Terminal("il"), new Terminal("n'"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[86, 16],[[new Terminal("il"), new Terminal("ne"), new Terminal("y"), new Terminal("a"), new Terminal("pas"), new Terminal("des"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(20, new FunApp("Enter",[]),[],[[new Terminal("introduire")]]), new Rule(47, new FunApp("Enter",[]),[],[[new Terminal("introduire")]]), new Rule(46, new FunApp("Enter",[]),[],[[new Terminal("introduis")]]), new Rule(45, new FunApp("Enter",[]),[],[[new Terminal("introduis")]]), new Rule(44, new FunApp("Enter",[]),[],[[new Terminal("introduit")]]), new Rule(43, new FunApp("Enter",[]),[],[[new Terminal("introduisons")]]), new Rule(42, new FunApp("Enter",[]),[],[[new Terminal("introduisez")]]), new Rule(41, new FunApp("Enter",[]),[],[[new Terminal("introduisent")]]), new Rule(40, new FunApp("Enter",[]),[],[[new Terminal("introduise")]]), new Rule(39, new FunApp("Enter",[]),[],[[new Terminal("introduises")]]), new Rule(38, new FunApp("Enter",[]),[],[[new Terminal("introduise")]]), new Rule(37, new FunApp("Enter",[]),[],[[new Terminal("introduisions")]]), new Rule(36, new FunApp("Enter",[]),[],[[new Terminal("introduisiez")]]), new Rule(35, new FunApp("Enter",[]),[],[[new Terminal("introduisent")]]), new Rule(34, new FunApp("Enter",[]),[],[[new Terminal("introduis")]]), new Rule(33, new FunApp("Enter",[]),[],[[new Terminal("introduisons")]]), new Rule(32, new FunApp("Enter",[]),[],[[new Terminal("introduisez")]]), new Rule(31, new FunApp("Enter",[]),[],[[new Terminal("introduit")]]), new Rule(30, new FunApp("Enter",[]),[],[[new Terminal("introduits")]]), new Rule(29, new FunApp("Enter",[]),[],[[new Terminal("introduite")]]), new Rule(28, new FunApp("Enter",[]),[],[[new Terminal("introduites")]]), new Rule(27, new FunApp("Enter",[]),[],[[new Terminal("introduisant")]]), new Rule(17, new FunApp("English",[]),[],[[new Terminal("anglais")]]), new Rule(16, new FunApp("English",[]),[],[[new Terminal("anglais")]]), new Rule(20, new FunApp("Delete",[]),[],[[new Terminal("enlever")]]), new Rule(47, new FunApp("Delete",[]),[],[[new Terminal("enlever")]]), new Rule(46, new FunApp("Delete",[]),[],[[new Terminal("enleve")]]), new Rule(45, new FunApp("Delete",[]),[],[[new Terminal("enleves")]]), new Rule(44, new FunApp("Delete",[]),[],[[new Terminal("enleve")]]), new Rule(43, new FunApp("Delete",[]),[],[[new Terminal("enlevons")]]), new Rule(42, new FunApp("Delete",[]),[],[[new Terminal("enlevez")]]), new Rule(41, new FunApp("Delete",[]),[],[[new Terminal("enlevent")]]), new Rule(40, new FunApp("Delete",[]),[],[[new Terminal("enleve")]]), new Rule(39, new FunApp("Delete",[]),[],[[new Terminal("enleves")]]), new Rule(38, new FunApp("Delete",[]),[],[[new Terminal("enleve")]]), new Rule(37, new FunApp("Delete",[]),[],[[new Terminal("enlevions")]]), new Rule(36, new FunApp("Delete",[]),[],[[new Terminal("enleviez")]]), new Rule(35, new FunApp("Delete",[]),[],[[new Terminal("enlevent")]]), new Rule(34, new FunApp("Delete",[]),[],[[new Terminal("enleve")]]), new Rule(33, new FunApp("Delete",[]),[],[[new Terminal("enlevons")]]), new Rule(32, new FunApp("Delete",[]),[],[[new Terminal("enlevez")]]), new Rule(31, new FunApp("Delete",[]),[],[[new Terminal("enlevé")]]), new Rule(30, new FunApp("Delete",[]),[],[[new Terminal("enlevés")]]), new Rule(29, new FunApp("Delete",[]),[],[[new Terminal("enlevée")]]), new Rule(28, new FunApp("Delete",[]),[],[[new Terminal("enlevées")]]), new Rule(27, new FunApp("Delete",[]),[],[[new Terminal("enlevant")]]), new Rule(85, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(85, new FunApp("DefSgDet",[]),[],[[new Terminal("le")]]), new Rule(84, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(84, new FunApp("DefSgDet",[]),[],[[new Terminal("le")]]), new Rule(83, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(83, new FunApp("DefSgDet",[]),[],[[new Terminal("du")]]), new Rule(82, new FunApp("DefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(82, new FunApp("DefSgDet",[]),[],[[new Terminal("au")]]), new Rule(81, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(81, new FunApp("DefSgDet",[]),[],[[new Terminal("le")]]), new Rule(80, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(80, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(79, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(79, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(78, new FunApp("DefSgDet",[]),[],[[new Terminal("d'"), new Terminal("l'")]]), new Rule(78, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(78, new FunApp("DefSgDet",[]),[],[[new Terminal("d'"), new Terminal("la")]]), new Rule(78, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(77, new FunApp("DefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(77, new FunApp("DefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("la")]]), new Rule(76, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(76, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(75, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(74, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(73, new FunApp("DefSgDet",[]),[],[[new Terminal("des")]]), new Rule(72, new FunApp("DefSgDet",[]),[],[[new Terminal("aux")]]), new Rule(71, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(70, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(69, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(68, new FunApp("DefSgDet",[]),[],[[new Terminal("des")]]), new Rule(67, new FunApp("DefSgDet",[]),[],[[new Terminal("aux")]]), new Rule(66, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(65, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(65, new FunApp("DefSgDet",[]),[],[[new Terminal("le")]]), new Rule(19, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(19, new FunApp("DefSgDet",[]),[],[[new Terminal("le")]]), new Rule(64, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(64, new FunApp("DefSgDet",[]),[],[[new Terminal("du")]]), new Rule(63, new FunApp("DefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(63, new FunApp("DefSgDet",[]),[],[[new Terminal("au")]]), new Rule(62, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(62, new FunApp("DefSgDet",[]),[],[[new Terminal("le")]]), new Rule(61, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(61, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(24, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(24, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(60, new FunApp("DefSgDet",[]),[],[[new Terminal("d'"), new Terminal("l'")]]), new Rule(60, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(60, new FunApp("DefSgDet",[]),[],[[new Terminal("d'"), new Terminal("la")]]), new Rule(60, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(59, new FunApp("DefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(59, new FunApp("DefSgDet",[]),[],[[new Terminal("Ã"), new Terminal("la")]]), new Rule(58, new FunApp("DefSgDet",[]),[],[[new Terminal("l'")]]), new Rule(58, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(57, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(56, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(55, new FunApp("DefSgDet",[]),[],[[new Terminal("des")]]), new Rule(54, new FunApp("DefSgDet",[]),[],[[new Terminal("aux")]]), new Rule(53, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(52, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(51, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(50, new FunApp("DefSgDet",[]),[],[[new Terminal("des")]]), new Rule(49, new FunApp("DefSgDet",[]),[],[[new Terminal("aux")]]), new Rule(48, new FunApp("DefSgDet",[]),[],[[new Terminal("les")]]), new Rule(85, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(85, new FunApp("DefPlDet",[]),[],[[new Terminal("le")]]), new Rule(84, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(84, new FunApp("DefPlDet",[]),[],[[new Terminal("le")]]), new Rule(83, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(83, new FunApp("DefPlDet",[]),[],[[new Terminal("du")]]), new Rule(82, new FunApp("DefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(82, new FunApp("DefPlDet",[]),[],[[new Terminal("au")]]), new Rule(81, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(81, new FunApp("DefPlDet",[]),[],[[new Terminal("le")]]), new Rule(80, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(80, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(79, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(79, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(78, new FunApp("DefPlDet",[]),[],[[new Terminal("d'"), new Terminal("l'")]]), new Rule(78, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(78, new FunApp("DefPlDet",[]),[],[[new Terminal("d'"), new Terminal("la")]]), new Rule(78, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(77, new FunApp("DefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(77, new FunApp("DefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("la")]]), new Rule(76, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(76, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(75, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(74, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(73, new FunApp("DefPlDet",[]),[],[[new Terminal("des")]]), new Rule(72, new FunApp("DefPlDet",[]),[],[[new Terminal("aux")]]), new Rule(71, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(70, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(69, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(68, new FunApp("DefPlDet",[]),[],[[new Terminal("des")]]), new Rule(67, new FunApp("DefPlDet",[]),[],[[new Terminal("aux")]]), new Rule(66, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(65, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(65, new FunApp("DefPlDet",[]),[],[[new Terminal("le")]]), new Rule(19, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(19, new FunApp("DefPlDet",[]),[],[[new Terminal("le")]]), new Rule(64, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(64, new FunApp("DefPlDet",[]),[],[[new Terminal("du")]]), new Rule(63, new FunApp("DefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(63, new FunApp("DefPlDet",[]),[],[[new Terminal("au")]]), new Rule(62, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(62, new FunApp("DefPlDet",[]),[],[[new Terminal("le")]]), new Rule(61, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(61, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(24, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(24, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(60, new FunApp("DefPlDet",[]),[],[[new Terminal("d'"), new Terminal("l'")]]), new Rule(60, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("l'")]]), new Rule(60, new FunApp("DefPlDet",[]),[],[[new Terminal("d'"), new Terminal("la")]]), new Rule(60, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(59, new FunApp("DefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("l'")]]), new Rule(59, new FunApp("DefPlDet",[]),[],[[new Terminal("Ã"), new Terminal("la")]]), new Rule(58, new FunApp("DefPlDet",[]),[],[[new Terminal("l'")]]), new Rule(58, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(57, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(56, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(55, new FunApp("DefPlDet",[]),[],[[new Terminal("des")]]), new Rule(54, new FunApp("DefPlDet",[]),[],[[new Terminal("aux")]]), new Rule(53, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(52, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(51, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(50, new FunApp("DefPlDet",[]),[],[[new Terminal("des")]]), new Rule(49, new FunApp("DefPlDet",[]),[],[[new Terminal("aux")]]), new Rule(48, new FunApp("DefPlDet",[]),[],[[new Terminal("les")]]), new Rule(17, new FunApp("Danish",[]),[],[[new Terminal("danois")]]), new Rule(16, new FunApp("Danish",[]),[],[[new Terminal("danois")]]), new Rule(20, new FunApp("Cut",[]),[],[[new Terminal("couper")]]), new Rule(47, new FunApp("Cut",[]),[],[[new Terminal("couper")]]), new Rule(46, new FunApp("Cut",[]),[],[[new Terminal("coupe")]]), new Rule(45, new FunApp("Cut",[]),[],[[new Terminal("coupes")]]), new Rule(44, new FunApp("Cut",[]),[],[[new Terminal("coupe")]]), new Rule(43, new FunApp("Cut",[]),[],[[new Terminal("coupons")]]), new Rule(42, new FunApp("Cut",[]),[],[[new Terminal("coupez")]]), new Rule(41, new FunApp("Cut",[]),[],[[new Terminal("coupent")]]), new Rule(40, new FunApp("Cut",[]),[],[[new Terminal("coupe")]]), new Rule(39, new FunApp("Cut",[]),[],[[new Terminal("coupes")]]), new Rule(38, new FunApp("Cut",[]),[],[[new Terminal("coupe")]]), new Rule(37, new FunApp("Cut",[]),[],[[new Terminal("coupions")]]), new Rule(36, new FunApp("Cut",[]),[],[[new Terminal("coupiez")]]), new Rule(35, new FunApp("Cut",[]),[],[[new Terminal("coupent")]]), new Rule(34, new FunApp("Cut",[]),[],[[new Terminal("coupe")]]), new Rule(33, new FunApp("Cut",[]),[],[[new Terminal("coupons")]]), new Rule(32, new FunApp("Cut",[]),[],[[new Terminal("coupez")]]), new Rule(31, new FunApp("Cut",[]),[],[[new Terminal("coupé")]]), new Rule(30, new FunApp("Cut",[]),[],[[new Terminal("coupés")]]), new Rule(29, new FunApp("Cut",[]),[],[[new Terminal("coupée")]]), new Rule(28, new FunApp("Cut",[]),[],[[new Terminal("coupées")]]), new Rule(27, new FunApp("Cut",[]),[],[[new Terminal("coupant")]]), new Rule(20, new FunApp("Copy",[]),[],[[new Terminal("copier")]]), new Rule(47, new FunApp("Copy",[]),[],[[new Terminal("copier")]]), new Rule(46, new FunApp("Copy",[]),[],[[new Terminal("copie")]]), new Rule(45, new FunApp("Copy",[]),[],[[new Terminal("copies")]]), new Rule(44, new FunApp("Copy",[]),[],[[new Terminal("copie")]]), new Rule(43, new FunApp("Copy",[]),[],[[new Terminal("copions")]]), new Rule(42, new FunApp("Copy",[]),[],[[new Terminal("copiez")]]), new Rule(41, new FunApp("Copy",[]),[],[[new Terminal("copient")]]), new Rule(40, new FunApp("Copy",[]),[],[[new Terminal("copie")]]), new Rule(39, new FunApp("Copy",[]),[],[[new Terminal("copies")]]), new Rule(38, new FunApp("Copy",[]),[],[[new Terminal("copie")]]), new Rule(37, new FunApp("Copy",[]),[],[[new Terminal("copiions")]]), new Rule(36, new FunApp("Copy",[]),[],[[new Terminal("copiiez")]]), new Rule(35, new FunApp("Copy",[]),[],[[new Terminal("copient")]]), new Rule(34, new FunApp("Copy",[]),[],[[new Terminal("copie")]]), new Rule(33, new FunApp("Copy",[]),[],[[new Terminal("copions")]]), new Rule(32, new FunApp("Copy",[]),[],[[new Terminal("copiez")]]), new Rule(31, new FunApp("Copy",[]),[],[[new Terminal("copié")]]), new Rule(30, new FunApp("Copy",[]),[],[[new Terminal("copiés")]]), new Rule(29, new FunApp("Copy",[]),[],[[new Terminal("copiée")]]), new Rule(28, new FunApp("Copy",[]),[],[[new Terminal("copiées")]]), new Rule(27, new FunApp("Copy",[]),[],[[new Terminal("copiant")]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 24, 13, 23],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 24, 13, 23],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 24, 13, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 24, 13, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 19, 15, 17],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 19, 15, 17],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 19, 15, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 19, 15, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 24, 26, 23],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 24, 26, 23],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 24, 26, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 24, 26, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 19, 25, 17],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[22, 19, 25, 17],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 19, 25, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 19, 25, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[22, 24, 23],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[22, 24, 23],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[21, 24, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[20, 24, 23],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[22, 19, 17],[[new Terminal("s'"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[22, 19, 17],[[new Terminal("se"), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[21, 19, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[20, 19, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(17, new FunApp("Bulgarian",[]),[],[[new Terminal("bulgarien")]]), new Rule(16, new FunApp("Bulgarian",[]),[],[[new Terminal("bulgariens")]]), new Rule(15, new FunApp("Available",[]),[],[[new Terminal("disponible")]]), new Rule(14, new FunApp("Available",[]),[],[[new Terminal("disponibles")]]), new Rule(13, new FunApp("Available",[]),[],[[new Terminal("disponible")]]), new Rule(12, new FunApp("Available",[]),[],[[new Terminal("disponibles")]]), new Rule(11, new FunApp("Available",[]),[],[[new Terminal("disponiblement")]]), new Rule(10, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponible")]]), new Rule(9, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponibles")]]), new Rule(8, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponible")]]), new Rule(7, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponibles")]]), new Rule(6, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponiblement")]]), new Rule(5, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponible")]]), new Rule(4, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponibles")]]), new Rule(3, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponible")]]), new Rule(2, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponibles")]]), new Rule(1, new FunApp("Available",[]),[],[[new Terminal("plus"), new Terminal("disponiblement")]])],{Adjective:[25, 15, 10, 5, 86, 14, 9, 4, 26, 13, 8, 3, 88, 12, 7, 2, 11, 6, 1], Determiner:[85, 65, 75, 57, 80, 61, 70, 52, 84, 19, 74, 56, 79, 24, 69, 51, 83, 64, 73, 55, 78, 60, 68, 50, 82, 63, 72, 54, 77, 59, 67, 49, 81, 62, 71, 53, 76, 58, 66, 48], Float:[-3], Int:[-2], Noun:[89, 17, 23, 16, 87], Sentence:[18], String:[-1], Verb:[20, 21, 22, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27], _Var:[-4]})), EditorSpa: new GFConcrete({coding: "utf8"},{Available: function(cs){return new Arr(new Arr(new Suffix("disponible", Editor.concretes["EditorSpa"].rule("_0", cs)), Editor.concretes["EditorSpa"].rule("_5", cs), Editor.concretes["EditorSpa"].rule("_5", cs)), new Int(1));}, Bulgarian: function(cs){return new Arr(new Suffix("Búlgaro", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Command: function(cs){return new Arr(new Seq(Editor.concretes["EditorSpa"].rule("_12", cs), Editor.concretes["EditorSpa"].rule("_38", cs), Editor.concretes["EditorSpa"].rule("_40", cs), Editor.concretes["EditorSpa"].rule("_42", cs), Editor.concretes["EditorSpa"].rule("_55", cs)));}, CommandAdj: function(cs){return new Arr(new Seq(Editor.concretes["EditorSpa"].rule("_12", cs), Editor.concretes["EditorSpa"].rule("_14", cs).sel(Editor.concretes["EditorSpa"].rule("_24", cs).sel(Editor.concretes["EditorSpa"].rule("_63", cs))), Editor.concretes["EditorSpa"].rule("_40", cs), Editor.concretes["EditorSpa"].rule("_41", cs).sel(Editor.concretes["EditorSpa"].rule("_63", cs)),(new Arr(new Arr(Editor.concretes["EditorSpa"].rule("_13", cs), Editor.concretes["EditorSpa"].rule("_78", cs)), new Arr(Editor.concretes["EditorSpa"].rule("_78", cs), Editor.concretes["EditorSpa"].rule("_78", cs)))).sel(Editor.concretes["EditorSpa"].rule("_19", cs)).sel(Editor.concretes["EditorSpa"].rule("_21", cs))));}, Copy: function(cs){return new Arr(new Suffix("Cop", new Arr(new Str("iar"), new Str("iar"), new Str("ío"), new Str("ías"), new Str("ía"), new Str("iamos"), new Str("iáis"), new Str("ían"), new Str("íe"), new Str("íes"), new Str("íe"), new Str("iemos"), new Str("iéis"), new Str("íen"), new Str("ía"), new Str("iemos"), new Str("iad"), new Str("iado"), new Str("iados"), new Str("iada"), new Str("iadas"), new Str("iando"))), new Int(0));}, Cut: function(cs){return new Arr(new Suffix("Cort", Editor.concretes["EditorSpa"].rule("_89", cs)), new Int(0));}, Danish: function(cs){return new Arr(new Suffix("Danés", Editor.concretes["EditorSpa"].rule("_92", cs)), new Int(0));}, DefPlDet: function(cs){return Editor.concretes["EditorSpa"].rule("_109", cs);}, DefSgDet: function(cs){return Editor.concretes["EditorSpa"].rule("_109", cs);}, Delete: function(cs){return new Arr(new Suffix("Borr", Editor.concretes["EditorSpa"].rule("_89", cs)), new Int(0));}, English: function(cs){return new Arr(new Suffix("Inglés", Editor.concretes["EditorSpa"].rule("_92", cs)), new Int(0));}, Enter: function(cs){return new Arr(new Suffix("introdu", new Arr(new Str("cir"), new Str("cir"), new Str("zco"), new Str("ces"), new Str("ce"), new Str("cimos"), new Str("cís"), new Str("cen"), new Str("zca"), new Str("zcas"), new Str("zca"), new Str("zcamos"), new Str("zcáis"), new Str("zcan"), new Str("ce"), new Str("zcamos"), new Str("cid"), new Str("cido"), new Str("cidos"), new Str("cida"), new Str("cidas"), new Str("ciendo"))), new Int(0));}, ErrorMessage: function(cs){return new Arr(new Seq(new Str("no"),(new Arr(Editor.concretes["EditorSpa"].rule("_119", cs), Editor.concretes["EditorSpa"].rule("_119", cs))).sel(Editor.concretes["EditorSpa"].rule("_121", cs).sel(new Int(0))).sel(Editor.concretes["EditorSpa"].rule("_121", cs).sel(new Int(1))).sel(Editor.concretes["EditorSpa"].rule("_121", cs).sel(new Int(2))),(new Arr(Editor.concretes["EditorSpa"].rule("_128", cs), Editor.concretes["EditorSpa"].rule("_128", cs))).sel(Editor.concretes["EditorSpa"].rule("_130", cs).sel(new Int(0))).sel(Editor.concretes["EditorSpa"].rule("_130", cs).sel(new Int(1))),(new Arr(new Str("un"), new Str("una"))).sel(Editor.concretes["EditorSpa"].rule("_136", cs)),(new Arr(new Seq(Editor.concretes["EditorSpa"].rule("_139", cs), Editor.concretes["EditorSpa"].rule("_140", cs)), new Seq(Editor.concretes["EditorSpa"].rule("_140", cs), Editor.concretes["EditorSpa"].rule("_139", cs)))).sel(Editor.concretes["EditorSpa"].rule("_29", cs))));}, Finnish: function(cs){return new Arr(new Suffix("Finlandés", Editor.concretes["EditorSpa"].rule("_92", cs)), new Int(0));}, Float_N: function(cs){return new Arr(new Arr(new Seq(new Str("número"), new Str("real")), new Seq(new Str("números"), new Str("real"))), new Int(0));}, French: function(cs){return new Arr(new Suffix("Francés", Editor.concretes["EditorSpa"].rule("_92", cs)), new Int(0));}, German: function(cs){return new Arr(new Suffix("Alemán", Editor.concretes["EditorSpa"].rule("_92", cs)), new Int(0));}, IndefPlDet: function(cs){return Editor.concretes["EditorSpa"].rule("_176", cs);}, IndefSgDet: function(cs){return Editor.concretes["EditorSpa"].rule("_176", cs);}, Integer_N: function(cs){return new Arr(new Arr(new Seq(new Str("número"), new Str("entero")), new Seq(new Str("números"), new Str("entero"))), new Int(0));}, Italian: function(cs){return new Arr(new Suffix("Italiano", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Label: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_12", cs));}, Language: function(cs){return new Arr(new Suffix("lenguaje", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Next: function(cs){return new Arr(new Arr(new Suffix("siguiente", Editor.concretes["EditorSpa"].rule("_0", cs)), Editor.concretes["EditorSpa"].rule("_190", cs), Editor.concretes["EditorSpa"].rule("_190", cs)), new Int(1));}, Node: function(cs){return new Arr(new Suffix("nodo", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Norwegian: function(cs){return new Arr(new Suffix("Noruego", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Page: function(cs){return new Arr(new Suffix("página", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(1));}, Parse: function(cs){return new Arr(new Arr(new Str("Analizar"), new Str("Analizar"), new Str("Analizo"), new Str("Analizas"), new Str("Analiza"), new Str("Analizamos"), new Str("Analizáis"), new Str("Analizan"), new Str("Analice"), new Str("Analices"), new Str("Analice"), new Str("Analicemos"), new Str("Analicéis"), new Str("Analicen"), new Str("Analiza"), new Str("Analicemos"), new Str("Analizad"), new Str("sintácticamente"), new Str("sintácticamentos"), new Str("sintácticamenta"), new Str("sintácticamentas"), new Str("Analizando")), new Int(0));}, Paste: function(cs){return new Arr(new Suffix("Peg", new Arr(new Str("ar"), new Str("ar"), new Str("o"), new Str("as"), new Str("a"), new Str("amos"), new Str("áis"), new Str("an"), new Str("ue"), new Str("ues"), new Str("ue"), new Str("uemos"), new Str("uéis"), new Str("uen"), new Str("a"), new Str("uemos"), new Str("ad"), new Str("ado"), new Str("ados"), new Str("ada"), new Str("adas"), new Str("ando"))), new Int(0));}, Previous: function(cs){return new Arr(new Arr(new Suffix("anterior", new Arr(new Str(""), new Str("es"), new Str(""), new Str("es"), new Str("mente"))), Editor.concretes["EditorSpa"].rule("_209", cs), Editor.concretes["EditorSpa"].rule("_209", cs)), new Int(1));}, RandomlyCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorSpa"].rule("_12", cs), Editor.concretes["EditorSpa"].rule("_38", cs), Editor.concretes["EditorSpa"].rule("_40", cs), Editor.concretes["EditorSpa"].rule("_42", cs), Editor.concretes["EditorSpa"].rule("_55", cs), new Str("aleatoriamente")));}, Redo: function(cs){return new Arr(new Suffix("reh", Editor.concretes["EditorSpa"].rule("_214", cs)), new Int(0));}, Refine: function(cs){return new Arr(new Suffix("Refin", Editor.concretes["EditorSpa"].rule("_89", cs)), new Int(0));}, Refinement: function(cs){return new Arr(new Suffix("refinamiento", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Replace: function(cs){return new Arr(new Suffix("Reempla", new Arr(new Str("zar"), new Str("zar"), new Str("zo"), new Str("zas"), new Str("za"), new Str("zamos"), new Str("záis"), new Str("zan"), new Str("ce"), new Str("ces"), new Str("ce"), new Str("cemos"), new Str("céis"), new Str("cen"), new Str("za"), new Str("cemos"), new Str("zad"), new Str("zado"), new Str("zados"), new Str("zada"), new Str("zadas"), new Str("zando"))), new Int(0));}, Russian: function(cs){return new Arr(new Suffix("Ruso", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Select: function(cs){return new Arr(new Suffix("Seleccion", Editor.concretes["EditorSpa"].rule("_89", cs)), new Int(0));}, Show: function(cs){return new Arr(new Suffix("Mostr", Editor.concretes["EditorSpa"].rule("_89", cs)), new Int(0));}, SingleWordCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorSpa"].rule("_12", cs), Editor.concretes["EditorSpa"].rule("_14", cs).sel((new Arr(new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(1))).sel(Editor.concretes["EditorSpa"].rule("_31", cs))), Editor.concretes["EditorSpa"].rule("_41", cs).sel(Editor.concretes["EditorSpa"].rule("_31", cs))));}, Spanish: function(cs){return new Arr(new Suffix("Español", Editor.concretes["EditorSpa"].rule("_92", cs)), new Int(0));}, String_N: function(cs){return new Arr(new Arr(new Seq(new Str("cadena"), new Str("de"), new Str("caracteres")), new Seq(new Str("cadenas"), new Str("de"), new Str("caracteres"))), new Int(1));}, Swedish: function(cs){return new Arr(new Suffix("Sueco", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(0));}, Tree: function(cs){return new Arr(new Suffix("árbol", Editor.concretes["EditorSpa"].rule("_92", cs)), new Int(0));}, Undo: function(cs){return new Arr(new Suffix("desh", Editor.concretes["EditorSpa"].rule("_214", cs)), new Int(0));}, Wrap: function(cs){return new Arr(new Suffix("env", new Arr(new Str("olver"), new Str("olver"), new Str("uelvo"), new Str("uelves"), new Str("uelve"), new Str("olvemos"), new Str("olvéis"), new Str("uelven"), new Str("uelva"), new Str("uelvas"), new Str("uelva"), new Str("olvamos"), new Str("olváis"), new Str("uelvan"), new Str("uelve"), new Str("olvamos"), new Str("olved"), new Str("olvido"), new Str("olvidos"), new Str("olvida"), new Str("olvidas"), new Str("olviendo"))), new Int(0));}, Wrapper: function(cs){return new Arr(new Suffix("envoltura", Editor.concretes["EditorSpa"].rule("_8", cs)), new Int(1));}, _0: function(cs){return new Arr(new Str(""), new Str("s"), new Str(""), new Str("s"), new Str("mente"));}, _100: function(cs){return new Seq(new Str("de"), new Str("los"));}, _101: function(cs){return new Seq(new Str("a"), new Str("los"));}, _102: function(cs){return new Arr(new Str("los"), new Str("los"), Editor.concretes["EditorSpa"].rule("_100", cs), Editor.concretes["EditorSpa"].rule("_101", cs));}, _103: function(cs){return new Seq(new Str("de"), new Str("las"));}, _104: function(cs){return new Seq(new Str("a"), new Str("las"));}, _105: function(cs){return new Arr(new Str("las"), new Str("las"), Editor.concretes["EditorSpa"].rule("_103", cs), Editor.concretes["EditorSpa"].rule("_104", cs));}, _106: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_102", cs), Editor.concretes["EditorSpa"].rule("_105", cs));}, _107: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_99", cs), Editor.concretes["EditorSpa"].rule("_106", cs));}, _108: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_107", cs), Editor.concretes["EditorSpa"].rule("_107", cs));}, _109: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_108", cs));}, _11: function(cs){return cs[0].sel(new Int(0));}, _117: function(cs){return new Arr(new Str("he"), new Str("has"), new Str("hay"));}, _118: function(cs){return new Arr(new Str("hemos"), new Str("habéis"), new Str("han"));}, _119: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_117", cs), Editor.concretes["EditorSpa"].rule("_118", cs));}, _12: function(cs){return Editor.concretes["EditorSpa"].rule("_11", cs).sel(new Int(0));}, _121: function(cs){return new Arr(new Int(0), new Int(0), new Int(2));}, _128: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_13", cs), Editor.concretes["EditorSpa"].rule("_13", cs));}, _13: function(cs){return new Seq();}, _130: function(cs){return new Arr(new Int(0), new Int(0));}, _136: function(cs){return cs[1].sel(new Int(1));}, _138: function(cs){return Editor.concretes["EditorSpa"].rule("_69", cs).sel(Editor.concretes["EditorSpa"].rule("_136", cs));}, _139: function(cs){return Editor.concretes["EditorSpa"].rule("_12", cs).sel(Editor.concretes["EditorSpa"].rule("_138", cs));}, _14: function(cs){return new Arr(new Str("&+"), Editor.concretes["EditorSpa"].rule("_13", cs));}, _140: function(cs){return Editor.concretes["EditorSpa"].rule("_43", cs).sel(new Int(0));}, _15: function(cs){return new Arr(new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(1), new Int(1));}, _157: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_13", cs), Editor.concretes["EditorSpa"].rule("_13", cs), Editor.concretes["EditorSpa"].rule("_13", cs), Editor.concretes["EditorSpa"].rule("_13", cs));}, _158: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_157", cs), Editor.concretes["EditorSpa"].rule("_157", cs));}, _159: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_158", cs), Editor.concretes["EditorSpa"].rule("_158", cs));}, _16: function(cs){return new Arr(new Int(13), new Int(13));}, _160: function(cs){return new Seq(new Str("de"), new Str("un"));}, _161: function(cs){return new Seq(new Str("a"), new Str("un"));}, _162: function(cs){return new Arr(new Str("un"), new Str("un"), Editor.concretes["EditorSpa"].rule("_160", cs), Editor.concretes["EditorSpa"].rule("_161", cs));}, _163: function(cs){return new Seq(new Str("de"), new Str("una"));}, _164: function(cs){return new Seq(new Str("a"), new Str("una"));}, _165: function(cs){return new Arr(new Str("una"), new Str("una"), Editor.concretes["EditorSpa"].rule("_163", cs), Editor.concretes["EditorSpa"].rule("_164", cs));}, _166: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_162", cs), Editor.concretes["EditorSpa"].rule("_165", cs));}, _167: function(cs){return new Seq(new Str("de"), new Str("unos"));}, _168: function(cs){return new Seq(new Str("a"), new Str("unos"));}, _169: function(cs){return new Arr(new Str("unos"), new Str("unos"), Editor.concretes["EditorSpa"].rule("_167", cs), Editor.concretes["EditorSpa"].rule("_168", cs));}, _17: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_16", cs), Editor.concretes["EditorSpa"].rule("_16", cs));}, _170: function(cs){return new Seq(new Str("de"), new Str("unas"));}, _171: function(cs){return new Seq(new Str("a"), new Str("unas"));}, _172: function(cs){return new Arr(new Str("unas"), new Str("unas"), Editor.concretes["EditorSpa"].rule("_170", cs), Editor.concretes["EditorSpa"].rule("_171", cs));}, _173: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_169", cs), Editor.concretes["EditorSpa"].rule("_172", cs));}, _174: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_166", cs), Editor.concretes["EditorSpa"].rule("_173", cs));}, _175: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_159", cs), Editor.concretes["EditorSpa"].rule("_174", cs));}, _176: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_175", cs));}, _18: function(cs){return new Arr(new Int(1), new Int(0));}, _187: function(cs){return new Seq(new Str("más"), new Str("siguiente"));}, _188: function(cs){return new Seq(new Str("más"), new Str("siguientes"));}, _189: function(cs){return new Seq(new Str("más"), new Str("siguientemente"));}, _19: function(cs){return Editor.concretes["EditorSpa"].rule("_18", cs).sel(new Int(0));}, _190: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_187", cs), Editor.concretes["EditorSpa"].rule("_188", cs), Editor.concretes["EditorSpa"].rule("_187", cs), Editor.concretes["EditorSpa"].rule("_188", cs), Editor.concretes["EditorSpa"].rule("_189", cs));}, _2: function(cs){return new Seq(new Str("más"), new Str("disponible"));}, _20: function(cs){return Editor.concretes["EditorSpa"].rule("_17", cs).sel(Editor.concretes["EditorSpa"].rule("_19", cs));}, _206: function(cs){return new Seq(new Str("más"), new Str("anterior"));}, _207: function(cs){return new Seq(new Str("más"), new Str("anteriores"));}, _208: function(cs){return new Seq(new Str("más"), new Str("anteriormente"));}, _209: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_206", cs), Editor.concretes["EditorSpa"].rule("_207", cs), Editor.concretes["EditorSpa"].rule("_206", cs), Editor.concretes["EditorSpa"].rule("_207", cs), Editor.concretes["EditorSpa"].rule("_208", cs));}, _21: function(cs){return Editor.concretes["EditorSpa"].rule("_18", cs).sel(new Int(1));}, _214: function(cs){return new Arr(new Str("acer"), new Str("acer"), new Str("ago"), new Str("aces"), new Str("ace"), new Str("acemos"), new Str("acéis"), new Str("acen"), new Str("aga"), new Str("agas"), new Str("aga"), new Str("agamos"), new Str("agáis"), new Str("agan"), new Str("az"), new Str("agamos"), new Str("aced"), new Str("echo"), new Str("echos"), new Str("echa"), new Str("echas"), new Str("aciendo"));}, _22: function(cs){return Editor.concretes["EditorSpa"].rule("_20", cs).sel(Editor.concretes["EditorSpa"].rule("_21", cs));}, _23: function(cs){return Editor.concretes["EditorSpa"].rule("_15", cs).sel(Editor.concretes["EditorSpa"].rule("_22", cs));}, _24: function(cs){return new Arr(new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), new Int(0), Editor.concretes["EditorSpa"].rule("_23", cs));}, _25: function(cs){return new Arr(new Int(2), new Int(8));}, _253: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0], cs[0]);}, _256: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0]);}, _257: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_256", cs), Editor.concretes["EditorSpa"].rule("_256", cs));}, _258: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_257", cs), Editor.concretes["EditorSpa"].rule("_257", cs));}, _26: function(cs){return cs[2].sel(new Int(1));}, _27: function(cs){return Editor.concretes["EditorSpa"].rule("_25", cs).sel(Editor.concretes["EditorSpa"].rule("_26", cs));}, _28: function(cs){return new Arr(new Int(12), new Int(13));}, _29: function(cs){return cs[0].sel(new Int(1));}, _3: function(cs){return new Seq(new Str("más"), new Str("disponibles"));}, _30: function(cs){return Editor.concretes["EditorSpa"].rule("_18", cs).sel(Editor.concretes["EditorSpa"].rule("_29", cs));}, _31: function(cs){return Editor.concretes["EditorSpa"].rule("_28", cs).sel(Editor.concretes["EditorSpa"].rule("_30", cs));}, _32: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_27", cs), Editor.concretes["EditorSpa"].rule("_31", cs));}, _33: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_31", cs), Editor.concretes["EditorSpa"].rule("_31", cs));}, _34: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_32", cs), Editor.concretes["EditorSpa"].rule("_33", cs));}, _35: function(cs){return Editor.concretes["EditorSpa"].rule("_34", cs).sel(Editor.concretes["EditorSpa"].rule("_19", cs));}, _36: function(cs){return Editor.concretes["EditorSpa"].rule("_35", cs).sel(Editor.concretes["EditorSpa"].rule("_21", cs));}, _37: function(cs){return Editor.concretes["EditorSpa"].rule("_24", cs).sel(Editor.concretes["EditorSpa"].rule("_36", cs));}, _38: function(cs){return Editor.concretes["EditorSpa"].rule("_14", cs).sel(Editor.concretes["EditorSpa"].rule("_37", cs));}, _39: function(cs){return new Arr(new Str("me"), new Str("te"), new Str("le"), new Str("nos"), new Str("vos"), new Str("les"), new Str("me"), new Str("te"), new Str("le"), new Str("nos"), new Str("vos"), new Str("les"), Editor.concretes["EditorSpa"].rule("_13", cs), Editor.concretes["EditorSpa"].rule("_13", cs));}, _4: function(cs){return new Seq(new Str("más"), new Str("disponiblemente"));}, _40: function(cs){return Editor.concretes["EditorSpa"].rule("_39", cs).sel(Editor.concretes["EditorSpa"].rule("_22", cs));}, _41: function(cs){return new Arr(new Str("me"), new Str("te"), new Str("lo"), new Str("nos"), new Str("vos"), new Str("los"), new Str("me"), new Str("te"), new Str("la"), new Str("nos"), new Str("vos"), new Str("las"), new Str("se"), Editor.concretes["EditorSpa"].rule("_13", cs));}, _42: function(cs){return Editor.concretes["EditorSpa"].rule("_41", cs).sel(Editor.concretes["EditorSpa"].rule("_36", cs));}, _43: function(cs){return cs[1].sel(new Int(0));}, _44: function(cs){return Editor.concretes["EditorSpa"].rule("_43", cs).sel(new Int(1));}, _45: function(cs){return Editor.concretes["EditorSpa"].rule("_44", cs).sel(new Int(0));}, _46: function(cs){return Editor.concretes["EditorSpa"].rule("_45", cs).sel(Editor.concretes["EditorSpa"].rule("_26", cs));}, _47: function(cs){return Editor.concretes["EditorSpa"].rule("_46", cs).sel(new Int(1));}, _48: function(cs){return cs[2].sel(new Int(0));}, _49: function(cs){return Editor.concretes["EditorSpa"].rule("_48", cs).sel(new Int(0));}, _5: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_2", cs), Editor.concretes["EditorSpa"].rule("_3", cs), Editor.concretes["EditorSpa"].rule("_2", cs), Editor.concretes["EditorSpa"].rule("_3", cs), Editor.concretes["EditorSpa"].rule("_4", cs));}, _50: function(cs){return new Seq(Editor.concretes["EditorSpa"].rule("_47", cs), Editor.concretes["EditorSpa"].rule("_49", cs));}, _51: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_13", cs), Editor.concretes["EditorSpa"].rule("_50", cs));}, _52: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_50", cs), Editor.concretes["EditorSpa"].rule("_50", cs));}, _53: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_51", cs), Editor.concretes["EditorSpa"].rule("_52", cs));}, _54: function(cs){return Editor.concretes["EditorSpa"].rule("_53", cs).sel(Editor.concretes["EditorSpa"].rule("_19", cs));}, _55: function(cs){return Editor.concretes["EditorSpa"].rule("_54", cs).sel(Editor.concretes["EditorSpa"].rule("_21", cs));}, _58: function(cs){return cs[3].sel(new Int(1));}, _59: function(cs){return Editor.concretes["EditorSpa"].rule("_25", cs).sel(Editor.concretes["EditorSpa"].rule("_58", cs));}, _60: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_59", cs), Editor.concretes["EditorSpa"].rule("_31", cs));}, _61: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_60", cs), Editor.concretes["EditorSpa"].rule("_33", cs));}, _62: function(cs){return Editor.concretes["EditorSpa"].rule("_61", cs).sel(Editor.concretes["EditorSpa"].rule("_19", cs));}, _63: function(cs){return Editor.concretes["EditorSpa"].rule("_62", cs).sel(Editor.concretes["EditorSpa"].rule("_21", cs));}, _67: function(cs){return Editor.concretes["EditorSpa"].rule("_45", cs).sel(Editor.concretes["EditorSpa"].rule("_58", cs));}, _68: function(cs){return Editor.concretes["EditorSpa"].rule("_67", cs).sel(new Int(1));}, _69: function(cs){return new Arr(new Int(0), new Int(2));}, _70: function(cs){return Editor.concretes["EditorSpa"].rule("_69", cs).sel(Editor.concretes["EditorSpa"].rule("_58", cs));}, _71: function(cs){return Editor.concretes["EditorSpa"].rule("_49", cs).sel(Editor.concretes["EditorSpa"].rule("_70", cs));}, _72: function(cs){return cs[3].sel(new Int(0));}, _73: function(cs){return Editor.concretes["EditorSpa"].rule("_72", cs).sel(new Int(0));}, _74: function(cs){return new Seq(Editor.concretes["EditorSpa"].rule("_71", cs), Editor.concretes["EditorSpa"].rule("_73", cs));}, _75: function(cs){return new Seq(Editor.concretes["EditorSpa"].rule("_73", cs), Editor.concretes["EditorSpa"].rule("_71", cs));}, _76: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_74", cs), Editor.concretes["EditorSpa"].rule("_75", cs));}, _77: function(cs){return Editor.concretes["EditorSpa"].rule("_76", cs).sel(Editor.concretes["EditorSpa"].rule("_26", cs));}, _78: function(cs){return new Seq(Editor.concretes["EditorSpa"].rule("_68", cs), Editor.concretes["EditorSpa"].rule("_77", cs));}, _8: function(cs){return new Arr(new Str(""), new Str("s"));}, _89: function(cs){return new Arr(new Str("ar"), new Str("ar"), new Str("o"), new Str("as"), new Str("a"), new Str("amos"), new Str("áis"), new Str("an"), new Str("e"), new Str("es"), new Str("e"), new Str("emos"), new Str("éis"), new Str("en"), new Str("a"), new Str("emos"), new Str("ad"), new Str("ado"), new Str("ados"), new Str("ada"), new Str("adas"), new Str("ando"));}, _92: function(cs){return new Arr(new Str(""), new Str("es"));}, _95: function(cs){return new Arr(new Str("el"), new Str("el"), new Str("del"), new Str("al"));}, _96: function(cs){return new Seq(new Str("de"), new Str("la"));}, _97: function(cs){return new Seq(new Str("a"), new Str("la"));}, _98: function(cs){return new Arr(new Str("la"), new Str("la"), Editor.concretes["EditorSpa"].rule("_96", cs), Editor.concretes["EditorSpa"].rule("_97", cs));}, _99: function(cs){return new Arr(Editor.concretes["EditorSpa"].rule("_95", cs), Editor.concretes["EditorSpa"].rule("_98", cs));}, Adjective: function(cs){return new Arr(new Arr(Editor.concretes["EditorSpa"].rule("_253", cs), Editor.concretes["EditorSpa"].rule("_253", cs), Editor.concretes["EditorSpa"].rule("_253", cs)), new Int(0));}, Determiner: function(cs){return new Arr(new Arr(Editor.concretes["EditorSpa"].rule("_258", cs), Editor.concretes["EditorSpa"].rule("_258", cs)));}, Noun: function(cs){return new Arr(new Arr(cs[0], cs[0]), new Int(0));}, Sentence: function(cs){return new Arr(cs[0]);}, Verb: function(cs){return new Arr(new Arr(cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0]), new Int(0));}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}, new Parser("Sentence",[new Rule(22, new FunApp("Wrapper",[]),[],[[new Terminal("envoltura")]]), new Rule(78, new FunApp("Wrapper",[]),[],[[new Terminal("envolturas")]]), new Rule(20, new FunApp("Wrap",[]),[],[[new Terminal("envolver")]]), new Rule(46, new FunApp("Wrap",[]),[],[[new Terminal("envolver")]]), new Rule(45, new FunApp("Wrap",[]),[],[[new Terminal("envuelvo")]]), new Rule(44, new FunApp("Wrap",[]),[],[[new Terminal("envuelves")]]), new Rule(43, new FunApp("Wrap",[]),[],[[new Terminal("envuelve")]]), new Rule(42, new FunApp("Wrap",[]),[],[[new Terminal("envolvemos")]]), new Rule(41, new FunApp("Wrap",[]),[],[[new Terminal("envolvéis")]]), new Rule(40, new FunApp("Wrap",[]),[],[[new Terminal("envuelven")]]), new Rule(39, new FunApp("Wrap",[]),[],[[new Terminal("envuelva")]]), new Rule(38, new FunApp("Wrap",[]),[],[[new Terminal("envuelvas")]]), new Rule(37, new FunApp("Wrap",[]),[],[[new Terminal("envuelva")]]), new Rule(36, new FunApp("Wrap",[]),[],[[new Terminal("envolvamos")]]), new Rule(35, new FunApp("Wrap",[]),[],[[new Terminal("envolváis")]]), new Rule(34, new FunApp("Wrap",[]),[],[[new Terminal("envuelvan")]]), new Rule(33, new FunApp("Wrap",[]),[],[[new Terminal("envuelve")]]), new Rule(32, new FunApp("Wrap",[]),[],[[new Terminal("envolvamos")]]), new Rule(31, new FunApp("Wrap",[]),[],[[new Terminal("envolved")]]), new Rule(30, new FunApp("Wrap",[]),[],[[new Terminal("envolvido")]]), new Rule(29, new FunApp("Wrap",[]),[],[[new Terminal("envolvidos")]]), new Rule(28, new FunApp("Wrap",[]),[],[[new Terminal("envolvida")]]), new Rule(27, new FunApp("Wrap",[]),[],[[new Terminal("envolvidas")]]), new Rule(26, new FunApp("Wrap",[]),[],[[new Terminal("envolviendo")]]), new Rule(20, new FunApp("Undo",[]),[],[[new Terminal("deshacer")]]), new Rule(46, new FunApp("Undo",[]),[],[[new Terminal("deshacer")]]), new Rule(45, new FunApp("Undo",[]),[],[[new Terminal("deshago")]]), new Rule(44, new FunApp("Undo",[]),[],[[new Terminal("deshaces")]]), new Rule(43, new FunApp("Undo",[]),[],[[new Terminal("deshace")]]), new Rule(42, new FunApp("Undo",[]),[],[[new Terminal("deshacemos")]]), new Rule(41, new FunApp("Undo",[]),[],[[new Terminal("deshacéis")]]), new Rule(40, new FunApp("Undo",[]),[],[[new Terminal("deshacen")]]), new Rule(39, new FunApp("Undo",[]),[],[[new Terminal("deshaga")]]), new Rule(38, new FunApp("Undo",[]),[],[[new Terminal("deshagas")]]), new Rule(37, new FunApp("Undo",[]),[],[[new Terminal("deshaga")]]), new Rule(36, new FunApp("Undo",[]),[],[[new Terminal("deshagamos")]]), new Rule(35, new FunApp("Undo",[]),[],[[new Terminal("deshagáis")]]), new Rule(34, new FunApp("Undo",[]),[],[[new Terminal("deshagan")]]), new Rule(33, new FunApp("Undo",[]),[],[[new Terminal("deshaz")]]), new Rule(32, new FunApp("Undo",[]),[],[[new Terminal("deshagamos")]]), new Rule(31, new FunApp("Undo",[]),[],[[new Terminal("deshaced")]]), new Rule(30, new FunApp("Undo",[]),[],[[new Terminal("deshecho")]]), new Rule(29, new FunApp("Undo",[]),[],[[new Terminal("deshechos")]]), new Rule(28, new FunApp("Undo",[]),[],[[new Terminal("deshecha")]]), new Rule(27, new FunApp("Undo",[]),[],[[new Terminal("deshechas")]]), new Rule(26, new FunApp("Undo",[]),[],[[new Terminal("deshaciendo")]]), new Rule(17, new FunApp("Tree",[]),[],[[new Terminal("árbol")]]), new Rule(16, new FunApp("Tree",[]),[],[[new Terminal("árboles")]]), new Rule(17, new FunApp("Swedish",[]),[],[[new Terminal("Sueco")]]), new Rule(16, new FunApp("Swedish",[]),[],[[new Terminal("Suecos")]]), new Rule(22, new FunApp("String_N",[]),[],[[new Terminal("cadena"), new Terminal("de"), new Terminal("caracteres")]]), new Rule(78, new FunApp("String_N",[]),[],[[new Terminal("cadenas"), new Terminal("de"), new Terminal("caracteres")]]), new Rule(17, new FunApp("Spanish",[]),[],[[new Terminal("Español")]]), new Rule(16, new FunApp("Spanish",[]),[],[[new Terminal("Españoles")]]), new Rule(18, new FunApp("SingleWordCommand",[new Arg(0)]),[21],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se")]]), new Rule(18, new FunApp("SingleWordCommand",[new Arg(0)]),[20],[[new ArgProj(0, 0)]]), new Rule(20, new FunApp("Show",[]),[],[[new Terminal("Mostrar")]]), new Rule(46, new FunApp("Show",[]),[],[[new Terminal("Mostrar")]]), new Rule(45, new FunApp("Show",[]),[],[[new Terminal("Mostro")]]), new Rule(44, new FunApp("Show",[]),[],[[new Terminal("Mostras")]]), new Rule(43, new FunApp("Show",[]),[],[[new Terminal("Mostra")]]), new Rule(42, new FunApp("Show",[]),[],[[new Terminal("Mostramos")]]), new Rule(41, new FunApp("Show",[]),[],[[new Terminal("Mostráis")]]), new Rule(40, new FunApp("Show",[]),[],[[new Terminal("Mostran")]]), new Rule(39, new FunApp("Show",[]),[],[[new Terminal("Mostre")]]), new Rule(38, new FunApp("Show",[]),[],[[new Terminal("Mostres")]]), new Rule(37, new FunApp("Show",[]),[],[[new Terminal("Mostre")]]), new Rule(36, new FunApp("Show",[]),[],[[new Terminal("Mostremos")]]), new Rule(35, new FunApp("Show",[]),[],[[new Terminal("Mostréis")]]), new Rule(34, new FunApp("Show",[]),[],[[new Terminal("Mostren")]]), new Rule(33, new FunApp("Show",[]),[],[[new Terminal("Mostra")]]), new Rule(32, new FunApp("Show",[]),[],[[new Terminal("Mostremos")]]), new Rule(31, new FunApp("Show",[]),[],[[new Terminal("Mostrad")]]), new Rule(30, new FunApp("Show",[]),[],[[new Terminal("Mostrado")]]), new Rule(29, new FunApp("Show",[]),[],[[new Terminal("Mostrados")]]), new Rule(28, new FunApp("Show",[]),[],[[new Terminal("Mostrada")]]), new Rule(27, new FunApp("Show",[]),[],[[new Terminal("Mostradas")]]), new Rule(26, new FunApp("Show",[]),[],[[new Terminal("Mostrando")]]), new Rule(20, new FunApp("Select",[]),[],[[new Terminal("Seleccionar")]]), new Rule(46, new FunApp("Select",[]),[],[[new Terminal("Seleccionar")]]), new Rule(45, new FunApp("Select",[]),[],[[new Terminal("Selecciono")]]), new Rule(44, new FunApp("Select",[]),[],[[new Terminal("Seleccionas")]]), new Rule(43, new FunApp("Select",[]),[],[[new Terminal("Selecciona")]]), new Rule(42, new FunApp("Select",[]),[],[[new Terminal("Seleccionamos")]]), new Rule(41, new FunApp("Select",[]),[],[[new Terminal("Seleccionáis")]]), new Rule(40, new FunApp("Select",[]),[],[[new Terminal("Seleccionan")]]), new Rule(39, new FunApp("Select",[]),[],[[new Terminal("Seleccione")]]), new Rule(38, new FunApp("Select",[]),[],[[new Terminal("Selecciones")]]), new Rule(37, new FunApp("Select",[]),[],[[new Terminal("Seleccione")]]), new Rule(36, new FunApp("Select",[]),[],[[new Terminal("Seleccionemos")]]), new Rule(35, new FunApp("Select",[]),[],[[new Terminal("Seleccionéis")]]), new Rule(34, new FunApp("Select",[]),[],[[new Terminal("Seleccionen")]]), new Rule(33, new FunApp("Select",[]),[],[[new Terminal("Selecciona")]]), new Rule(32, new FunApp("Select",[]),[],[[new Terminal("Seleccionemos")]]), new Rule(31, new FunApp("Select",[]),[],[[new Terminal("Seleccionad")]]), new Rule(30, new FunApp("Select",[]),[],[[new Terminal("Seleccionado")]]), new Rule(29, new FunApp("Select",[]),[],[[new Terminal("Seleccionados")]]), new Rule(28, new FunApp("Select",[]),[],[[new Terminal("Seleccionada")]]), new Rule(27, new FunApp("Select",[]),[],[[new Terminal("Seleccionadas")]]), new Rule(26, new FunApp("Select",[]),[],[[new Terminal("Seleccionando")]]), new Rule(17, new FunApp("Russian",[]),[],[[new Terminal("Ruso")]]), new Rule(16, new FunApp("Russian",[]),[],[[new Terminal("Rusos")]]), new Rule(20, new FunApp("Replace",[]),[],[[new Terminal("Reemplazar")]]), new Rule(46, new FunApp("Replace",[]),[],[[new Terminal("Reemplazar")]]), new Rule(45, new FunApp("Replace",[]),[],[[new Terminal("Reemplazo")]]), new Rule(44, new FunApp("Replace",[]),[],[[new Terminal("Reemplazas")]]), new Rule(43, new FunApp("Replace",[]),[],[[new Terminal("Reemplaza")]]), new Rule(42, new FunApp("Replace",[]),[],[[new Terminal("Reemplazamos")]]), new Rule(41, new FunApp("Replace",[]),[],[[new Terminal("Reemplazáis")]]), new Rule(40, new FunApp("Replace",[]),[],[[new Terminal("Reemplazan")]]), new Rule(39, new FunApp("Replace",[]),[],[[new Terminal("Reemplace")]]), new Rule(38, new FunApp("Replace",[]),[],[[new Terminal("Reemplaces")]]), new Rule(37, new FunApp("Replace",[]),[],[[new Terminal("Reemplace")]]), new Rule(36, new FunApp("Replace",[]),[],[[new Terminal("Reemplacemos")]]), new Rule(35, new FunApp("Replace",[]),[],[[new Terminal("Reemplacéis")]]), new Rule(34, new FunApp("Replace",[]),[],[[new Terminal("Reemplacen")]]), new Rule(33, new FunApp("Replace",[]),[],[[new Terminal("Reemplaza")]]), new Rule(32, new FunApp("Replace",[]),[],[[new Terminal("Reemplacemos")]]), new Rule(31, new FunApp("Replace",[]),[],[[new Terminal("Reemplazad")]]), new Rule(30, new FunApp("Replace",[]),[],[[new Terminal("Reemplazado")]]), new Rule(29, new FunApp("Replace",[]),[],[[new Terminal("Reemplazados")]]), new Rule(28, new FunApp("Replace",[]),[],[[new Terminal("Reemplazada")]]), new Rule(27, new FunApp("Replace",[]),[],[[new Terminal("Reemplazadas")]]), new Rule(26, new FunApp("Replace",[]),[],[[new Terminal("Reemplazando")]]), new Rule(17, new FunApp("Refinement",[]),[],[[new Terminal("refinamiento")]]), new Rule(16, new FunApp("Refinement",[]),[],[[new Terminal("refinamientos")]]), new Rule(20, new FunApp("Refine",[]),[],[[new Terminal("Refinar")]]), new Rule(46, new FunApp("Refine",[]),[],[[new Terminal("Refinar")]]), new Rule(45, new FunApp("Refine",[]),[],[[new Terminal("Refino")]]), new Rule(44, new FunApp("Refine",[]),[],[[new Terminal("Refinas")]]), new Rule(43, new FunApp("Refine",[]),[],[[new Terminal("Refina")]]), new Rule(42, new FunApp("Refine",[]),[],[[new Terminal("Refinamos")]]), new Rule(41, new FunApp("Refine",[]),[],[[new Terminal("Refináis")]]), new Rule(40, new FunApp("Refine",[]),[],[[new Terminal("Refinan")]]), new Rule(39, new FunApp("Refine",[]),[],[[new Terminal("Refine")]]), new Rule(38, new FunApp("Refine",[]),[],[[new Terminal("Refines")]]), new Rule(37, new FunApp("Refine",[]),[],[[new Terminal("Refine")]]), new Rule(36, new FunApp("Refine",[]),[],[[new Terminal("Refinemos")]]), new Rule(35, new FunApp("Refine",[]),[],[[new Terminal("Refinéis")]]), new Rule(34, new FunApp("Refine",[]),[],[[new Terminal("Refinen")]]), new Rule(33, new FunApp("Refine",[]),[],[[new Terminal("Refina")]]), new Rule(32, new FunApp("Refine",[]),[],[[new Terminal("Refinemos")]]), new Rule(31, new FunApp("Refine",[]),[],[[new Terminal("Refinad")]]), new Rule(30, new FunApp("Refine",[]),[],[[new Terminal("Refinado")]]), new Rule(29, new FunApp("Refine",[]),[],[[new Terminal("Refinados")]]), new Rule(28, new FunApp("Refine",[]),[],[[new Terminal("Refinada")]]), new Rule(27, new FunApp("Refine",[]),[],[[new Terminal("Refinadas")]]), new Rule(26, new FunApp("Refine",[]),[],[[new Terminal("Refinando")]]), new Rule(20, new FunApp("Redo",[]),[],[[new Terminal("rehacer")]]), new Rule(46, new FunApp("Redo",[]),[],[[new Terminal("rehacer")]]), new Rule(45, new FunApp("Redo",[]),[],[[new Terminal("rehago")]]), new Rule(44, new FunApp("Redo",[]),[],[[new Terminal("rehaces")]]), new Rule(43, new FunApp("Redo",[]),[],[[new Terminal("rehace")]]), new Rule(42, new FunApp("Redo",[]),[],[[new Terminal("rehacemos")]]), new Rule(41, new FunApp("Redo",[]),[],[[new Terminal("rehacéis")]]), new Rule(40, new FunApp("Redo",[]),[],[[new Terminal("rehacen")]]), new Rule(39, new FunApp("Redo",[]),[],[[new Terminal("rehaga")]]), new Rule(38, new FunApp("Redo",[]),[],[[new Terminal("rehagas")]]), new Rule(37, new FunApp("Redo",[]),[],[[new Terminal("rehaga")]]), new Rule(36, new FunApp("Redo",[]),[],[[new Terminal("rehagamos")]]), new Rule(35, new FunApp("Redo",[]),[],[[new Terminal("rehagáis")]]), new Rule(34, new FunApp("Redo",[]),[],[[new Terminal("rehagan")]]), new Rule(33, new FunApp("Redo",[]),[],[[new Terminal("rehaz")]]), new Rule(32, new FunApp("Redo",[]),[],[[new Terminal("rehagamos")]]), new Rule(31, new FunApp("Redo",[]),[],[[new Terminal("rehaced")]]), new Rule(30, new FunApp("Redo",[]),[],[[new Terminal("rehecho")]]), new Rule(29, new FunApp("Redo",[]),[],[[new Terminal("rehechos")]]), new Rule(28, new FunApp("Redo",[]),[],[[new Terminal("rehecha")]]), new Rule(27, new FunApp("Redo",[]),[],[[new Terminal("rehechas")]]), new Rule(26, new FunApp("Redo",[]),[],[[new Terminal("rehaciendo")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[21, 23, 22],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aleatoriamente")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[20, 23, 22],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aleatoriamente")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[21, 19, 17],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aleatoriamente")]]), new Rule(18, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[20, 19, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("aleatoriamente")]]), new Rule(15, new FunApp("Previous",[]),[],[[new Terminal("anterior")]]), new Rule(14, new FunApp("Previous",[]),[],[[new Terminal("anteriores")]]), new Rule(13, new FunApp("Previous",[]),[],[[new Terminal("anterior")]]), new Rule(12, new FunApp("Previous",[]),[],[[new Terminal("anteriores")]]), new Rule(11, new FunApp("Previous",[]),[],[[new Terminal("anteriormente")]]), new Rule(10, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anterior")]]), new Rule(9, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anteriores")]]), new Rule(8, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anterior")]]), new Rule(7, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anteriores")]]), new Rule(6, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anteriormente")]]), new Rule(5, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anterior")]]), new Rule(4, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anteriores")]]), new Rule(3, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anterior")]]), new Rule(2, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anteriores")]]), new Rule(1, new FunApp("Previous",[]),[],[[new Terminal("más"), new Terminal("anteriormente")]]), new Rule(20, new FunApp("Paste",[]),[],[[new Terminal("Pegar")]]), new Rule(46, new FunApp("Paste",[]),[],[[new Terminal("Pegar")]]), new Rule(45, new FunApp("Paste",[]),[],[[new Terminal("Pego")]]), new Rule(44, new FunApp("Paste",[]),[],[[new Terminal("Pegas")]]), new Rule(43, new FunApp("Paste",[]),[],[[new Terminal("Pega")]]), new Rule(42, new FunApp("Paste",[]),[],[[new Terminal("Pegamos")]]), new Rule(41, new FunApp("Paste",[]),[],[[new Terminal("Pegáis")]]), new Rule(40, new FunApp("Paste",[]),[],[[new Terminal("Pegan")]]), new Rule(39, new FunApp("Paste",[]),[],[[new Terminal("Pegue")]]), new Rule(38, new FunApp("Paste",[]),[],[[new Terminal("Pegues")]]), new Rule(37, new FunApp("Paste",[]),[],[[new Terminal("Pegue")]]), new Rule(36, new FunApp("Paste",[]),[],[[new Terminal("Peguemos")]]), new Rule(35, new FunApp("Paste",[]),[],[[new Terminal("Peguéis")]]), new Rule(34, new FunApp("Paste",[]),[],[[new Terminal("Peguen")]]), new Rule(33, new FunApp("Paste",[]),[],[[new Terminal("Pega")]]), new Rule(32, new FunApp("Paste",[]),[],[[new Terminal("Peguemos")]]), new Rule(31, new FunApp("Paste",[]),[],[[new Terminal("Pegad")]]), new Rule(30, new FunApp("Paste",[]),[],[[new Terminal("Pegado")]]), new Rule(29, new FunApp("Paste",[]),[],[[new Terminal("Pegados")]]), new Rule(28, new FunApp("Paste",[]),[],[[new Terminal("Pegada")]]), new Rule(27, new FunApp("Paste",[]),[],[[new Terminal("Pegadas")]]), new Rule(26, new FunApp("Paste",[]),[],[[new Terminal("Pegando")]]), new Rule(20, new FunApp("Parse",[]),[],[[new Terminal("Analizar")]]), new Rule(46, new FunApp("Parse",[]),[],[[new Terminal("Analizar")]]), new Rule(45, new FunApp("Parse",[]),[],[[new Terminal("Analizo")]]), new Rule(44, new FunApp("Parse",[]),[],[[new Terminal("Analizas")]]), new Rule(43, new FunApp("Parse",[]),[],[[new Terminal("Analiza")]]), new Rule(42, new FunApp("Parse",[]),[],[[new Terminal("Analizamos")]]), new Rule(41, new FunApp("Parse",[]),[],[[new Terminal("Analizáis")]]), new Rule(40, new FunApp("Parse",[]),[],[[new Terminal("Analizan")]]), new Rule(39, new FunApp("Parse",[]),[],[[new Terminal("Analice")]]), new Rule(38, new FunApp("Parse",[]),[],[[new Terminal("Analices")]]), new Rule(37, new FunApp("Parse",[]),[],[[new Terminal("Analice")]]), new Rule(36, new FunApp("Parse",[]),[],[[new Terminal("Analicemos")]]), new Rule(35, new FunApp("Parse",[]),[],[[new Terminal("Analicéis")]]), new Rule(34, new FunApp("Parse",[]),[],[[new Terminal("Analicen")]]), new Rule(33, new FunApp("Parse",[]),[],[[new Terminal("Analiza")]]), new Rule(32, new FunApp("Parse",[]),[],[[new Terminal("Analicemos")]]), new Rule(31, new FunApp("Parse",[]),[],[[new Terminal("Analizad")]]), new Rule(30, new FunApp("Parse",[]),[],[[new Terminal("sintácticamente")]]), new Rule(29, new FunApp("Parse",[]),[],[[new Terminal("sintácticamentos")]]), new Rule(28, new FunApp("Parse",[]),[],[[new Terminal("sintácticamenta")]]), new Rule(27, new FunApp("Parse",[]),[],[[new Terminal("sintácticamentas")]]), new Rule(26, new FunApp("Parse",[]),[],[[new Terminal("Analizando")]]), new Rule(22, new FunApp("Page",[]),[],[[new Terminal("página")]]), new Rule(78, new FunApp("Page",[]),[],[[new Terminal("páginas")]]), new Rule(17, new FunApp("Norwegian",[]),[],[[new Terminal("Noruego")]]), new Rule(16, new FunApp("Norwegian",[]),[],[[new Terminal("Noruegos")]]), new Rule(17, new FunApp("Node",[]),[],[[new Terminal("nodo")]]), new Rule(16, new FunApp("Node",[]),[],[[new Terminal("nodos")]]), new Rule(15, new FunApp("Next",[]),[],[[new Terminal("siguiente")]]), new Rule(14, new FunApp("Next",[]),[],[[new Terminal("siguientes")]]), new Rule(13, new FunApp("Next",[]),[],[[new Terminal("siguiente")]]), new Rule(12, new FunApp("Next",[]),[],[[new Terminal("siguientes")]]), new Rule(11, new FunApp("Next",[]),[],[[new Terminal("siguientemente")]]), new Rule(10, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguiente")]]), new Rule(9, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguientes")]]), new Rule(8, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguiente")]]), new Rule(7, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguientes")]]), new Rule(6, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguientemente")]]), new Rule(5, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguiente")]]), new Rule(4, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguientes")]]), new Rule(3, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguiente")]]), new Rule(2, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguientes")]]), new Rule(1, new FunApp("Next",[]),[],[[new Terminal("más"), new Terminal("siguientemente")]]), new Rule(17, new FunApp("Language",[]),[],[[new Terminal("lenguaje")]]), new Rule(16, new FunApp("Language",[]),[],[[new Terminal("lenguajes")]]), new Rule(18, new FunApp("Label",[new Arg(0)]),[77],[[new ArgProj(0, 0)]]), new Rule(77, new Arg(0),[22],[[new ArgProj(0, 0)]]), new Rule(77, new Arg(0),[17],[[new ArgProj(0, 0)]]), new Rule(17, new FunApp("Italian",[]),[],[[new Terminal("Italiano")]]), new Rule(16, new FunApp("Italian",[]),[],[[new Terminal("Italianos")]]), new Rule(17, new FunApp("Integer_N",[]),[],[[new Terminal("número"), new Terminal("entero")]]), new Rule(16, new FunApp("Integer_N",[]),[],[[new Terminal("números"), new Terminal("entero")]]), new Rule(76, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(75, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(74, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(73, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(72, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(71, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(70, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(69, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(68, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(67, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(66, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(65, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(64, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(63, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(62, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(61, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(60, new FunApp("IndefSgDet",[]),[],[[new Terminal("un")]]), new Rule(19, new FunApp("IndefSgDet",[]),[],[[new Terminal("un")]]), new Rule(59, new FunApp("IndefSgDet",[]),[],[[new Terminal("de"), new Terminal("un")]]), new Rule(58, new FunApp("IndefSgDet",[]),[],[[new Terminal("a"), new Terminal("un")]]), new Rule(57, new FunApp("IndefSgDet",[]),[],[[new Terminal("una")]]), new Rule(23, new FunApp("IndefSgDet",[]),[],[[new Terminal("una")]]), new Rule(56, new FunApp("IndefSgDet",[]),[],[[new Terminal("de"), new Terminal("una")]]), new Rule(55, new FunApp("IndefSgDet",[]),[],[[new Terminal("a"), new Terminal("una")]]), new Rule(54, new FunApp("IndefSgDet",[]),[],[[new Terminal("unos")]]), new Rule(53, new FunApp("IndefSgDet",[]),[],[[new Terminal("unos")]]), new Rule(52, new FunApp("IndefSgDet",[]),[],[[new Terminal("de"), new Terminal("unos")]]), new Rule(51, new FunApp("IndefSgDet",[]),[],[[new Terminal("a"), new Terminal("unos")]]), new Rule(50, new FunApp("IndefSgDet",[]),[],[[new Terminal("unas")]]), new Rule(49, new FunApp("IndefSgDet",[]),[],[[new Terminal("unas")]]), new Rule(48, new FunApp("IndefSgDet",[]),[],[[new Terminal("de"), new Terminal("unas")]]), new Rule(47, new FunApp("IndefSgDet",[]),[],[[new Terminal("a"), new Terminal("unas")]]), new Rule(76, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(75, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(74, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(73, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(72, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(71, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(70, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(69, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(68, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(67, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(66, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(65, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(64, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(63, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(62, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(61, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(60, new FunApp("IndefPlDet",[]),[],[[new Terminal("un")]]), new Rule(19, new FunApp("IndefPlDet",[]),[],[[new Terminal("un")]]), new Rule(59, new FunApp("IndefPlDet",[]),[],[[new Terminal("de"), new Terminal("un")]]), new Rule(58, new FunApp("IndefPlDet",[]),[],[[new Terminal("a"), new Terminal("un")]]), new Rule(57, new FunApp("IndefPlDet",[]),[],[[new Terminal("una")]]), new Rule(23, new FunApp("IndefPlDet",[]),[],[[new Terminal("una")]]), new Rule(56, new FunApp("IndefPlDet",[]),[],[[new Terminal("de"), new Terminal("una")]]), new Rule(55, new FunApp("IndefPlDet",[]),[],[[new Terminal("a"), new Terminal("una")]]), new Rule(54, new FunApp("IndefPlDet",[]),[],[[new Terminal("unos")]]), new Rule(53, new FunApp("IndefPlDet",[]),[],[[new Terminal("unos")]]), new Rule(52, new FunApp("IndefPlDet",[]),[],[[new Terminal("de"), new Terminal("unos")]]), new Rule(51, new FunApp("IndefPlDet",[]),[],[[new Terminal("a"), new Terminal("unos")]]), new Rule(50, new FunApp("IndefPlDet",[]),[],[[new Terminal("unas")]]), new Rule(49, new FunApp("IndefPlDet",[]),[],[[new Terminal("unas")]]), new Rule(48, new FunApp("IndefPlDet",[]),[],[[new Terminal("de"), new Terminal("unas")]]), new Rule(47, new FunApp("IndefPlDet",[]),[],[[new Terminal("a"), new Terminal("unas")]]), new Rule(17, new FunApp("German",[]),[],[[new Terminal("Alemán")]]), new Rule(16, new FunApp("German",[]),[],[[new Terminal("Alemánes")]]), new Rule(17, new FunApp("French",[]),[],[[new Terminal("Francés")]]), new Rule(16, new FunApp("French",[]),[],[[new Terminal("Francéses")]]), new Rule(17, new FunApp("Float_N",[]),[],[[new Terminal("número"), new Terminal("real")]]), new Rule(16, new FunApp("Float_N",[]),[],[[new Terminal("números"), new Terminal("real")]]), new Rule(17, new FunApp("Finnish",[]),[],[[new Terminal("Finlandés")]]), new Rule(16, new FunApp("Finnish",[]),[],[[new Terminal("Finlandéses")]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[13, 22],[[new Terminal("no"), new Terminal("hay"), new Terminal("una"), new ArgProj(1, 0), new ArgProj(0, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[15, 17],[[new Terminal("no"), new Terminal("hay"), new Terminal("un"), new ArgProj(1, 0), new ArgProj(0, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[25, 22],[[new Terminal("no"), new Terminal("hay"), new Terminal("una"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(18, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[24, 17],[[new Terminal("no"), new Terminal("hay"), new Terminal("un"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(20, new FunApp("Enter",[]),[],[[new Terminal("introducir")]]), new Rule(46, new FunApp("Enter",[]),[],[[new Terminal("introducir")]]), new Rule(45, new FunApp("Enter",[]),[],[[new Terminal("introduzco")]]), new Rule(44, new FunApp("Enter",[]),[],[[new Terminal("introduces")]]), new Rule(43, new FunApp("Enter",[]),[],[[new Terminal("introduce")]]), new Rule(42, new FunApp("Enter",[]),[],[[new Terminal("introducimos")]]), new Rule(41, new FunApp("Enter",[]),[],[[new Terminal("introducís")]]), new Rule(40, new FunApp("Enter",[]),[],[[new Terminal("introducen")]]), new Rule(39, new FunApp("Enter",[]),[],[[new Terminal("introduzca")]]), new Rule(38, new FunApp("Enter",[]),[],[[new Terminal("introduzcas")]]), new Rule(37, new FunApp("Enter",[]),[],[[new Terminal("introduzca")]]), new Rule(36, new FunApp("Enter",[]),[],[[new Terminal("introduzcamos")]]), new Rule(35, new FunApp("Enter",[]),[],[[new Terminal("introduzcáis")]]), new Rule(34, new FunApp("Enter",[]),[],[[new Terminal("introduzcan")]]), new Rule(33, new FunApp("Enter",[]),[],[[new Terminal("introduce")]]), new Rule(32, new FunApp("Enter",[]),[],[[new Terminal("introduzcamos")]]), new Rule(31, new FunApp("Enter",[]),[],[[new Terminal("introducid")]]), new Rule(30, new FunApp("Enter",[]),[],[[new Terminal("introducido")]]), new Rule(29, new FunApp("Enter",[]),[],[[new Terminal("introducidos")]]), new Rule(28, new FunApp("Enter",[]),[],[[new Terminal("introducida")]]), new Rule(27, new FunApp("Enter",[]),[],[[new Terminal("introducidas")]]), new Rule(26, new FunApp("Enter",[]),[],[[new Terminal("introduciendo")]]), new Rule(17, new FunApp("English",[]),[],[[new Terminal("Inglés")]]), new Rule(16, new FunApp("English",[]),[],[[new Terminal("Ingléses")]]), new Rule(20, new FunApp("Delete",[]),[],[[new Terminal("Borrar")]]), new Rule(46, new FunApp("Delete",[]),[],[[new Terminal("Borrar")]]), new Rule(45, new FunApp("Delete",[]),[],[[new Terminal("Borro")]]), new Rule(44, new FunApp("Delete",[]),[],[[new Terminal("Borras")]]), new Rule(43, new FunApp("Delete",[]),[],[[new Terminal("Borra")]]), new Rule(42, new FunApp("Delete",[]),[],[[new Terminal("Borramos")]]), new Rule(41, new FunApp("Delete",[]),[],[[new Terminal("Borráis")]]), new Rule(40, new FunApp("Delete",[]),[],[[new Terminal("Borran")]]), new Rule(39, new FunApp("Delete",[]),[],[[new Terminal("Borre")]]), new Rule(38, new FunApp("Delete",[]),[],[[new Terminal("Borres")]]), new Rule(37, new FunApp("Delete",[]),[],[[new Terminal("Borre")]]), new Rule(36, new FunApp("Delete",[]),[],[[new Terminal("Borremos")]]), new Rule(35, new FunApp("Delete",[]),[],[[new Terminal("Borréis")]]), new Rule(34, new FunApp("Delete",[]),[],[[new Terminal("Borren")]]), new Rule(33, new FunApp("Delete",[]),[],[[new Terminal("Borra")]]), new Rule(32, new FunApp("Delete",[]),[],[[new Terminal("Borremos")]]), new Rule(31, new FunApp("Delete",[]),[],[[new Terminal("Borrad")]]), new Rule(30, new FunApp("Delete",[]),[],[[new Terminal("Borrado")]]), new Rule(29, new FunApp("Delete",[]),[],[[new Terminal("Borrados")]]), new Rule(28, new FunApp("Delete",[]),[],[[new Terminal("Borrada")]]), new Rule(27, new FunApp("Delete",[]),[],[[new Terminal("Borradas")]]), new Rule(26, new FunApp("Delete",[]),[],[[new Terminal("Borrando")]]), new Rule(76, new FunApp("DefSgDet",[]),[],[[new Terminal("el")]]), new Rule(75, new FunApp("DefSgDet",[]),[],[[new Terminal("el")]]), new Rule(74, new FunApp("DefSgDet",[]),[],[[new Terminal("del")]]), new Rule(73, new FunApp("DefSgDet",[]),[],[[new Terminal("al")]]), new Rule(72, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(71, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(70, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(69, new FunApp("DefSgDet",[]),[],[[new Terminal("a"), new Terminal("la")]]), new Rule(68, new FunApp("DefSgDet",[]),[],[[new Terminal("los")]]), new Rule(67, new FunApp("DefSgDet",[]),[],[[new Terminal("los")]]), new Rule(66, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("los")]]), new Rule(65, new FunApp("DefSgDet",[]),[],[[new Terminal("a"), new Terminal("los")]]), new Rule(64, new FunApp("DefSgDet",[]),[],[[new Terminal("las")]]), new Rule(63, new FunApp("DefSgDet",[]),[],[[new Terminal("las")]]), new Rule(62, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("las")]]), new Rule(61, new FunApp("DefSgDet",[]),[],[[new Terminal("a"), new Terminal("las")]]), new Rule(60, new FunApp("DefSgDet",[]),[],[[new Terminal("el")]]), new Rule(19, new FunApp("DefSgDet",[]),[],[[new Terminal("el")]]), new Rule(59, new FunApp("DefSgDet",[]),[],[[new Terminal("del")]]), new Rule(58, new FunApp("DefSgDet",[]),[],[[new Terminal("al")]]), new Rule(57, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(23, new FunApp("DefSgDet",[]),[],[[new Terminal("la")]]), new Rule(56, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(55, new FunApp("DefSgDet",[]),[],[[new Terminal("a"), new Terminal("la")]]), new Rule(54, new FunApp("DefSgDet",[]),[],[[new Terminal("los")]]), new Rule(53, new FunApp("DefSgDet",[]),[],[[new Terminal("los")]]), new Rule(52, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("los")]]), new Rule(51, new FunApp("DefSgDet",[]),[],[[new Terminal("a"), new Terminal("los")]]), new Rule(50, new FunApp("DefSgDet",[]),[],[[new Terminal("las")]]), new Rule(49, new FunApp("DefSgDet",[]),[],[[new Terminal("las")]]), new Rule(48, new FunApp("DefSgDet",[]),[],[[new Terminal("de"), new Terminal("las")]]), new Rule(47, new FunApp("DefSgDet",[]),[],[[new Terminal("a"), new Terminal("las")]]), new Rule(76, new FunApp("DefPlDet",[]),[],[[new Terminal("el")]]), new Rule(75, new FunApp("DefPlDet",[]),[],[[new Terminal("el")]]), new Rule(74, new FunApp("DefPlDet",[]),[],[[new Terminal("del")]]), new Rule(73, new FunApp("DefPlDet",[]),[],[[new Terminal("al")]]), new Rule(72, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(71, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(70, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(69, new FunApp("DefPlDet",[]),[],[[new Terminal("a"), new Terminal("la")]]), new Rule(68, new FunApp("DefPlDet",[]),[],[[new Terminal("los")]]), new Rule(67, new FunApp("DefPlDet",[]),[],[[new Terminal("los")]]), new Rule(66, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("los")]]), new Rule(65, new FunApp("DefPlDet",[]),[],[[new Terminal("a"), new Terminal("los")]]), new Rule(64, new FunApp("DefPlDet",[]),[],[[new Terminal("las")]]), new Rule(63, new FunApp("DefPlDet",[]),[],[[new Terminal("las")]]), new Rule(62, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("las")]]), new Rule(61, new FunApp("DefPlDet",[]),[],[[new Terminal("a"), new Terminal("las")]]), new Rule(60, new FunApp("DefPlDet",[]),[],[[new Terminal("el")]]), new Rule(19, new FunApp("DefPlDet",[]),[],[[new Terminal("el")]]), new Rule(59, new FunApp("DefPlDet",[]),[],[[new Terminal("del")]]), new Rule(58, new FunApp("DefPlDet",[]),[],[[new Terminal("al")]]), new Rule(57, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(23, new FunApp("DefPlDet",[]),[],[[new Terminal("la")]]), new Rule(56, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("la")]]), new Rule(55, new FunApp("DefPlDet",[]),[],[[new Terminal("a"), new Terminal("la")]]), new Rule(54, new FunApp("DefPlDet",[]),[],[[new Terminal("los")]]), new Rule(53, new FunApp("DefPlDet",[]),[],[[new Terminal("los")]]), new Rule(52, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("los")]]), new Rule(51, new FunApp("DefPlDet",[]),[],[[new Terminal("a"), new Terminal("los")]]), new Rule(50, new FunApp("DefPlDet",[]),[],[[new Terminal("las")]]), new Rule(49, new FunApp("DefPlDet",[]),[],[[new Terminal("las")]]), new Rule(48, new FunApp("DefPlDet",[]),[],[[new Terminal("de"), new Terminal("las")]]), new Rule(47, new FunApp("DefPlDet",[]),[],[[new Terminal("a"), new Terminal("las")]]), new Rule(17, new FunApp("Danish",[]),[],[[new Terminal("Danés")]]), new Rule(16, new FunApp("Danish",[]),[],[[new Terminal("Danéses")]]), new Rule(20, new FunApp("Cut",[]),[],[[new Terminal("Cortar")]]), new Rule(46, new FunApp("Cut",[]),[],[[new Terminal("Cortar")]]), new Rule(45, new FunApp("Cut",[]),[],[[new Terminal("Corto")]]), new Rule(44, new FunApp("Cut",[]),[],[[new Terminal("Cortas")]]), new Rule(43, new FunApp("Cut",[]),[],[[new Terminal("Corta")]]), new Rule(42, new FunApp("Cut",[]),[],[[new Terminal("Cortamos")]]), new Rule(41, new FunApp("Cut",[]),[],[[new Terminal("Cortáis")]]), new Rule(40, new FunApp("Cut",[]),[],[[new Terminal("Cortan")]]), new Rule(39, new FunApp("Cut",[]),[],[[new Terminal("Corte")]]), new Rule(38, new FunApp("Cut",[]),[],[[new Terminal("Cortes")]]), new Rule(37, new FunApp("Cut",[]),[],[[new Terminal("Corte")]]), new Rule(36, new FunApp("Cut",[]),[],[[new Terminal("Cortemos")]]), new Rule(35, new FunApp("Cut",[]),[],[[new Terminal("Cortéis")]]), new Rule(34, new FunApp("Cut",[]),[],[[new Terminal("Corten")]]), new Rule(33, new FunApp("Cut",[]),[],[[new Terminal("Corta")]]), new Rule(32, new FunApp("Cut",[]),[],[[new Terminal("Cortemos")]]), new Rule(31, new FunApp("Cut",[]),[],[[new Terminal("Cortad")]]), new Rule(30, new FunApp("Cut",[]),[],[[new Terminal("Cortado")]]), new Rule(29, new FunApp("Cut",[]),[],[[new Terminal("Cortados")]]), new Rule(28, new FunApp("Cut",[]),[],[[new Terminal("Cortada")]]), new Rule(27, new FunApp("Cut",[]),[],[[new Terminal("Cortadas")]]), new Rule(26, new FunApp("Cut",[]),[],[[new Terminal("Cortando")]]), new Rule(20, new FunApp("Copy",[]),[],[[new Terminal("Copiar")]]), new Rule(46, new FunApp("Copy",[]),[],[[new Terminal("Copiar")]]), new Rule(45, new FunApp("Copy",[]),[],[[new Terminal("Copío")]]), new Rule(44, new FunApp("Copy",[]),[],[[new Terminal("Copías")]]), new Rule(43, new FunApp("Copy",[]),[],[[new Terminal("Copía")]]), new Rule(42, new FunApp("Copy",[]),[],[[new Terminal("Copiamos")]]), new Rule(41, new FunApp("Copy",[]),[],[[new Terminal("Copiáis")]]), new Rule(40, new FunApp("Copy",[]),[],[[new Terminal("Copían")]]), new Rule(39, new FunApp("Copy",[]),[],[[new Terminal("Copíe")]]), new Rule(38, new FunApp("Copy",[]),[],[[new Terminal("Copíes")]]), new Rule(37, new FunApp("Copy",[]),[],[[new Terminal("Copíe")]]), new Rule(36, new FunApp("Copy",[]),[],[[new Terminal("Copiemos")]]), new Rule(35, new FunApp("Copy",[]),[],[[new Terminal("Copiéis")]]), new Rule(34, new FunApp("Copy",[]),[],[[new Terminal("Copíen")]]), new Rule(33, new FunApp("Copy",[]),[],[[new Terminal("Copía")]]), new Rule(32, new FunApp("Copy",[]),[],[[new Terminal("Copiemos")]]), new Rule(31, new FunApp("Copy",[]),[],[[new Terminal("Copiad")]]), new Rule(30, new FunApp("Copy",[]),[],[[new Terminal("Copiado")]]), new Rule(29, new FunApp("Copy",[]),[],[[new Terminal("Copiados")]]), new Rule(28, new FunApp("Copy",[]),[],[[new Terminal("Copiada")]]), new Rule(27, new FunApp("Copy",[]),[],[[new Terminal("Copiadas")]]), new Rule(26, new FunApp("Copy",[]),[],[[new Terminal("Copiando")]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 23, 13, 22],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 23, 13, 22],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 19, 15, 17],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 19, 15, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(3, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 23, 25, 22],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 23, 25, 22],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[21, 19, 24, 17],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[20, 19, 24, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[21, 23, 22],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[20, 23, 22],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[21, 19, 17],[[new ArgProj(0, 0), new Terminal("&+"), new Terminal("se"), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(18, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[20, 19, 17],[[new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(17, new FunApp("Bulgarian",[]),[],[[new Terminal("Búlgaro")]]), new Rule(16, new FunApp("Bulgarian",[]),[],[[new Terminal("Búlgaros")]]), new Rule(15, new FunApp("Available",[]),[],[[new Terminal("disponible")]]), new Rule(14, new FunApp("Available",[]),[],[[new Terminal("disponibles")]]), new Rule(13, new FunApp("Available",[]),[],[[new Terminal("disponible")]]), new Rule(12, new FunApp("Available",[]),[],[[new Terminal("disponibles")]]), new Rule(11, new FunApp("Available",[]),[],[[new Terminal("disponiblemente")]]), new Rule(10, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponible")]]), new Rule(9, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponibles")]]), new Rule(8, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponible")]]), new Rule(7, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponibles")]]), new Rule(6, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponiblemente")]]), new Rule(5, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponible")]]), new Rule(4, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponibles")]]), new Rule(3, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponible")]]), new Rule(2, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponibles")]]), new Rule(1, new FunApp("Available",[]),[],[[new Terminal("más"), new Terminal("disponiblemente")]])],{Adjective:[24, 15, 10, 5, 14, 9, 4, 25, 13, 8, 3, 12, 7, 2, 11, 6, 1], Determiner:[76, 60, 68, 54, 72, 57, 64, 50, 75, 19, 67, 53, 71, 23, 63, 49, 74, 59, 66, 52, 70, 56, 62, 48, 73, 58, 65, 51, 69, 55, 61, 47], Float:[-3], Int:[-2], Noun:[77, 17, 22, 16, 78], Sentence:[18], String:[-1], Verb:[20, 21, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26], _Var:[-4]})), EditorSwe: new GFConcrete({coding: "utf8"},{Available: function(cs){return new Arr(new Suffix("tillgänglig", Editor.concretes["EditorSwe"].rule("_0", cs)), new Int(1));}, Bulgarian: function(cs){return new Arr(new Arr(new Arr(new Suffix("Bulgariska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Bulgariskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Bulgariskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Bulgariskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Command: function(cs){return new Arr(new Seq(Editor.concretes["EditorSwe"].rule("_16", cs), Editor.concretes["EditorSwe"].rule("_17", cs), Editor.concretes["EditorSwe"].rule("_23", cs), Editor.concretes["EditorSwe"].rule("_47", cs), Editor.concretes["EditorSwe"].rule("_62", cs), Editor.concretes["EditorSwe"].rule("_64", cs)));}, CommandAdj: function(cs){return new Arr(new Seq(Editor.concretes["EditorSwe"].rule("_16", cs), Editor.concretes["EditorSwe"].rule("_17", cs), Editor.concretes["EditorSwe"].rule("_67", cs).sel(new Int(1)).sel(Editor.concretes["EditorSwe"].rule("_69", cs)),(new Arr(new Seq(Editor.concretes["EditorSwe"].rule("_75", cs).sel(Editor.concretes["EditorSwe"].rule("_80", cs).sel(Editor.concretes["EditorSwe"].rule("_86", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_86", cs).sel(new Int(1)))), Editor.concretes["EditorSwe"].rule("_95", cs)), new Seq(Editor.concretes["EditorSwe"].rule("_75", cs).sel(Editor.concretes["EditorSwe"].rule("_80", cs).sel(Editor.concretes["EditorSwe"].rule("_97", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_97", cs).sel(new Int(1)))), Editor.concretes["EditorSwe"].rule("_95", cs)), new Seq(Editor.concretes["EditorSwe"].rule("_75", cs).sel(Editor.concretes["EditorSwe"].rule("_80", cs).sel(Editor.concretes["EditorSwe"].rule("_105", cs)).sel(Editor.concretes["EditorSwe"].rule("_107", cs))), Editor.concretes["EditorSwe"].rule("_93", cs).sel(new Int(1)).sel(new Int(0))))).sel(Editor.concretes["EditorSwe"].rule("_38", cs).sel(Editor.concretes["EditorSwe"].rule("_114", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_114", cs).sel(new Int(1))).sel(Editor.concretes["EditorSwe"].rule("_114", cs).sel(new Int(2)))), Editor.concretes["EditorSwe"].rule("_50", cs).sel(Editor.concretes["EditorSwe"].rule("_105", cs)).sel(Editor.concretes["EditorSwe"].rule("_107", cs)), Editor.concretes["EditorSwe"].rule("_64", cs)));}, Copy: function(cs){return new Arr(new Suffix("Kopiera", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Cut: function(cs){return new Arr(new Suffix("Klipp", Editor.concretes["EditorSwe"].rule("_129", cs)), new Str("ut"), new Int(0));}, Danish: function(cs){return new Arr(new Arr(new Arr(new Suffix("Danska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Danskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Danskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Danskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, DefPlDet: function(cs){return Editor.concretes["EditorSwe"].rule("_152", cs);}, DefSgDet: function(cs){return Editor.concretes["EditorSwe"].rule("_152", cs);}, Delete: function(cs){return new Arr(new Suffix("Radera", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, English: function(cs){return new Arr(new Arr(new Arr(new Suffix("Engelska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Engelskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Engelskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Engelskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Enter: function(cs){return new Arr(new Suffix("Skriv", new Arr(new Str("er"), new Str("s"), new Str(""), new Str("s"), new Str("a"), new Str("as"), new Str("d"), new Str("ds"), new Str("t"), new Str("ts"), new Str("da"), new Str("das"), new Str("da"), new Str("das"), new Str("da"), new Str("das"))), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, ErrorMessage: function(cs){return new Arr(new Seq(new Str("det"), new Str("finns"), new Str("inte"),(new Arr(new Str("en"), new Str("ett"))).sel(Editor.concretes["EditorSwe"].rule("_39", cs)),(new Arr(new Seq(Editor.concretes["EditorSwe"].rule("_173", cs).sel(Editor.concretes["EditorSwe"].rule("_177", cs).sel(Editor.concretes["EditorSwe"].rule("_183", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_183", cs).sel(new Int(1)))), Editor.concretes["EditorSwe"].rule("_189", cs)), new Seq(Editor.concretes["EditorSwe"].rule("_173", cs).sel(Editor.concretes["EditorSwe"].rule("_177", cs).sel(Editor.concretes["EditorSwe"].rule("_191", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_191", cs).sel(new Int(1)))), Editor.concretes["EditorSwe"].rule("_189", cs)), new Seq(Editor.concretes["EditorSwe"].rule("_173", cs).sel(Editor.concretes["EditorSwe"].rule("_177", cs).sel(Editor.concretes["EditorSwe"].rule("_198", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_198", cs).sel(new Int(1)))), Editor.concretes["EditorSwe"].rule("_20", cs).sel(new Int(0))))).sel(Editor.concretes["EditorSwe"].rule("_38", cs).sel(Editor.concretes["EditorSwe"].rule("_207", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_207", cs).sel(new Int(1))).sel(Editor.concretes["EditorSwe"].rule("_207", cs).sel(new Int(2))))));}, Finnish: function(cs){return new Arr(new Arr(new Arr(new Suffix("Finska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Finskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Finskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Finskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Float_N: function(cs){return new Arr(new Arr(new Arr(Editor.concretes["EditorSwe"].rule("_225", cs), new Suffix("flyttalet", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(Editor.concretes["EditorSwe"].rule("_225", cs), new Suffix("flyttalen", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(1));}, French: function(cs){return new Arr(new Arr(new Arr(new Suffix("Franska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Franskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Franskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Franskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, German: function(cs){return new Arr(new Arr(new Arr(new Suffix("Tyska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Tyskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Tyskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Tyskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, IndefPlDet: function(cs){return Editor.concretes["EditorSwe"].rule("_255", cs);}, IndefSgDet: function(cs){return Editor.concretes["EditorSwe"].rule("_255", cs);}, Integer_N: function(cs){return new Arr(new Arr(new Arr(Editor.concretes["EditorSwe"].rule("_256", cs), new Suffix("heltalet", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(Editor.concretes["EditorSwe"].rule("_256", cs), new Suffix("heltalen", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(1));}, Italian: function(cs){return new Arr(new Arr(new Arr(new Suffix("Italienska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Italienskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Italienskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Italienskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Label: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_168", cs).sel(new Int(0)).sel(new Int(0)));}, Language: function(cs){return new Arr(new Arr(new Arr(Editor.concretes["EditorSwe"].rule("_274", cs), new Suffix("språket", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(Editor.concretes["EditorSwe"].rule("_274", cs), new Suffix("språken", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(1));}, Next: function(cs){return new Arr(new Suffix("näst", Editor.concretes["EditorSwe"].rule("_0", cs)), new Int(1));}, Node: function(cs){return new Arr(new Arr(new Arr(new Suffix("nod", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("noden", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("nodar", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("nodarna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Norwegian: function(cs){return new Arr(new Arr(new Arr(new Suffix("Norska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Norskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Norskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Norskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Page: function(cs){return new Arr(new Arr(new Arr(new Suffix("sida", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("sidan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("sidor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("sidorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Parse: function(cs){return new Arr(new Suffix("Parsa", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Paste: function(cs){return new Arr(new Suffix("Klistra", Editor.concretes["EditorSwe"].rule("_126", cs)), new Str("in"), new Int(0));}, Previous: function(cs){return new Arr(new Arr(new Str("föregående"), new Str("föregåendes"), new Str("föregående"), new Str("föregåendes"), new Str("föregående"), new Str("föregåendes"), new Str("föregående"), new Str("föregåendes"), new Str("föregående"), new Str("föregåendes"), Editor.concretes["EditorSwe"].rule("_48", cs), new Str("s"), Editor.concretes["EditorSwe"].rule("_48", cs), new Str("s"), new Str("a"), new Str("as")), new Int(1));}, RandomlyCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorSwe"].rule("_16", cs), Editor.concretes["EditorSwe"].rule("_17", cs), Editor.concretes["EditorSwe"].rule("_23", cs), Editor.concretes["EditorSwe"].rule("_47", cs), Editor.concretes["EditorSwe"].rule("_62", cs), Editor.concretes["EditorSwe"].rule("_64", cs), new Str("slumpmässigt")));}, Redo: function(cs){return new Arr(new Suffix("Upprepa", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Refine: function(cs){return new Arr(new Suffix("Raffinera", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Refinement: function(cs){return new Arr(new Arr(new Arr(new Suffix("raffinemang", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("raffinemangen", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("raffinemangar", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("raffinemangarna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Replace: function(cs){return new Arr(new Suffix("Ersätt", Editor.concretes["EditorSwe"].rule("_129", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Russian: function(cs){return new Arr(new Arr(new Arr(new Suffix("Ryska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Ryskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Ryskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Ryskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Select: function(cs){return new Arr(new Suffix("Välj", Editor.concretes["EditorSwe"].rule("_129", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Show: function(cs){return new Arr(new Suffix("Visa", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, SingleWordCommand: function(cs){return new Arr(new Seq(Editor.concretes["EditorSwe"].rule("_16", cs), Editor.concretes["EditorSwe"].rule("_17", cs),(new Arr(Editor.concretes["EditorSwe"].rule("_345", cs), Editor.concretes["EditorSwe"].rule("_345", cs), new Arr((new Arr(Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs), new Str("oss"))).sel(Editor.concretes["EditorSwe"].rule("_14", cs)),(new Arr(Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs), new Str("er"))).sel(Editor.concretes["EditorSwe"].rule("_14", cs)), Editor.concretes["EditorSwe"].rule("_344", cs)))).sel(Editor.concretes["EditorSwe"].rule("_76", cs).sel(new Int(0))).sel(Editor.concretes["EditorSwe"].rule("_76", cs).sel(new Int(1)))));}, Spanish: function(cs){return new Arr(new Arr(new Arr(new Suffix("Spanska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Spanskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Spanskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Spanskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, String_N: function(cs){return new Arr(new Arr(new Arr(new Suffix("sträng", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("strängen", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("strängar", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("strängarna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Swedish: function(cs){return new Arr(new Arr(new Arr(new Suffix("Svenska", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Svenskan", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("Svenskor", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("Svenskorna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, Tree: function(cs){return new Arr(new Arr(new Arr(Editor.concretes["EditorSwe"].rule("_382", cs), new Suffix("trädet", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(Editor.concretes["EditorSwe"].rule("_382", cs), new Suffix("träden", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(1));}, Undo: function(cs){return new Arr(new Suffix("Ångra", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Wrap: function(cs){return new Arr(new Suffix("Förpacka", Editor.concretes["EditorSwe"].rule("_126", cs)), Editor.concretes["EditorSwe"].rule("_48", cs), new Int(0));}, Wrapper: function(cs){return new Arr(new Arr(new Arr(new Suffix("förpackning", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("förpackningen", Editor.concretes["EditorSwe"].rule("_3", cs))), new Arr(new Suffix("förpackningar", Editor.concretes["EditorSwe"].rule("_3", cs)), new Suffix("förpackningarna", Editor.concretes["EditorSwe"].rule("_3", cs)))), new Int(0));}, _0: function(cs){return new Arr(new Str(""), new Str("s"), new Str("t"), new Str("ts"), new Str("a"), new Str("as"), new Str("a"), new Str("as"), new Str("a"), new Str("as"), new Str("are"), new Str("ares"), new Str("ast"), new Str("asts"), new Str("aste"), new Str("astes"));}, _104: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_85", cs), new Int(2));}, _105: function(cs){return Editor.concretes["EditorSwe"].rule("_104", cs).sel(new Int(0));}, _107: function(cs){return Editor.concretes["EditorSwe"].rule("_104", cs).sel(new Int(1));}, _114: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_39", cs), new Int(1), new Int(0));}, _12: function(cs){return cs[0].sel(new Int(0));}, _126: function(cs){return new Arr(new Str("r"), new Str("s"), new Str(""), new Str("s"), new Str(""), new Str("s"), new Str("d"), new Str("ds"), new Str("t"), new Str("ts"), new Str("de"), new Str("des"), new Str("de"), new Str("des"), new Str("de"), new Str("des"));}, _129: function(cs){return new Arr(new Str("er"), new Str("s"), new Str(""), new Str("s"), new Str("a"), new Str("as"), new Str("t"), new Str("ts"), new Str("t"), new Str("ts"), new Str("ta"), new Str("tas"), new Str("ta"), new Str("tas"), new Str("ta"), new Str("tas"));}, _13: function(cs){return new Arr(new Int(2), new Int(3), new Int(2));}, _14: function(cs){return cs[0].sel(new Int(2));}, _140: function(cs){return new Arr(new Str("n"), new Str("t"));}, _141: function(cs){return new Suffix("de", Editor.concretes["EditorSwe"].rule("_140", cs));}, _142: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_141", cs), Editor.concretes["EditorSwe"].rule("_141", cs));}, _143: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs));}, _144: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_141", cs), Editor.concretes["EditorSwe"].rule("_143", cs));}, _145: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_142", cs), Editor.concretes["EditorSwe"].rule("_144", cs));}, _146: function(cs){return new Arr(new Str(""), new Str(""));}, _147: function(cs){return new Suffix("de", Editor.concretes["EditorSwe"].rule("_146", cs));}, _148: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_147", cs), Editor.concretes["EditorSwe"].rule("_147", cs));}, _149: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_147", cs), Editor.concretes["EditorSwe"].rule("_143", cs));}, _15: function(cs){return Editor.concretes["EditorSwe"].rule("_13", cs).sel(Editor.concretes["EditorSwe"].rule("_14", cs));}, _150: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_148", cs), Editor.concretes["EditorSwe"].rule("_149", cs));}, _151: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_145", cs), Editor.concretes["EditorSwe"].rule("_150", cs));}, _152: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_151", cs), new Int(2));}, _16: function(cs){return Editor.concretes["EditorSwe"].rule("_12", cs).sel(Editor.concretes["EditorSwe"].rule("_15", cs));}, _168: function(cs){return Editor.concretes["EditorSwe"].rule("_12", cs).sel(new Int(0));}, _169: function(cs){return Editor.concretes["EditorSwe"].rule("_12", cs).sel(new Int(2));}, _17: function(cs){return cs[0].sel(new Int(1));}, _170: function(cs){return Editor.concretes["EditorSwe"].rule("_12", cs).sel(new Int(4));}, _171: function(cs){return Editor.concretes["EditorSwe"].rule("_12", cs).sel(new Int(6));}, _172: function(cs){return Editor.concretes["EditorSwe"].rule("_12", cs).sel(new Int(8));}, _173: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_168", cs), Editor.concretes["EditorSwe"].rule("_169", cs), Editor.concretes["EditorSwe"].rule("_170", cs), Editor.concretes["EditorSwe"].rule("_171", cs), Editor.concretes["EditorSwe"].rule("_172", cs));}, _174: function(cs){return Editor.concretes["EditorSwe"].rule("_76", cs).sel(Editor.concretes["EditorSwe"].rule("_39", cs));}, _175: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_174", cs), new Int(3), new Int(3));}, _176: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_174", cs), new Int(4), new Int(4));}, _177: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_175", cs), Editor.concretes["EditorSwe"].rule("_175", cs), Editor.concretes["EditorSwe"].rule("_176", cs));}, _178: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_39", cs), new Int(0));}, _179: function(cs){return Editor.concretes["EditorSwe"].rule("_178", cs).sel(new Int(0));}, _18: function(cs){return cs[1].sel(new Int(0));}, _180: function(cs){return Editor.concretes["EditorSwe"].rule("_52", cs).sel(Editor.concretes["EditorSwe"].rule("_179", cs));}, _181: function(cs){return Editor.concretes["EditorSwe"].rule("_178", cs).sel(new Int(1));}, _182: function(cs){return Editor.concretes["EditorSwe"].rule("_180", cs).sel(Editor.concretes["EditorSwe"].rule("_181", cs));}, _183: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_182", cs), new Int(0));}, _189: function(cs){return Editor.concretes["EditorSwe"].rule("_67", cs).sel(new Int(0));}, _19: function(cs){return Editor.concretes["EditorSwe"].rule("_18", cs).sel(new Int(0));}, _191: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_182", cs), new Int(1));}, _198: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_182", cs), new Int(2));}, _20: function(cs){return Editor.concretes["EditorSwe"].rule("_19", cs).sel(new Int(1));}, _207: function(cs){return new Arr(new Int(0), new Int(1), new Int(0));}, _21: function(cs){return Editor.concretes["EditorSwe"].rule("_20", cs).sel(new Int(1));}, _22: function(cs){return cs[2].sel(new Int(1));}, _225: function(cs){return new Suffix("flyttal", Editor.concretes["EditorSwe"].rule("_3", cs));}, _23: function(cs){return Editor.concretes["EditorSwe"].rule("_21", cs).sel(Editor.concretes["EditorSwe"].rule("_22", cs));}, _24: function(cs){return cs[2].sel(new Int(0));}, _248: function(cs){return new Arr(new Str("n"), new Str("tt"));}, _249: function(cs){return new Suffix("e", Editor.concretes["EditorSwe"].rule("_248", cs));}, _25: function(cs){return Editor.concretes["EditorSwe"].rule("_24", cs).sel(new Int(0));}, _250: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_143", cs), Editor.concretes["EditorSwe"].rule("_249", cs));}, _251: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_250", cs), Editor.concretes["EditorSwe"].rule("_250", cs));}, _252: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_143", cs), Editor.concretes["EditorSwe"].rule("_143", cs));}, _253: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_252", cs), Editor.concretes["EditorSwe"].rule("_252", cs));}, _254: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_251", cs), Editor.concretes["EditorSwe"].rule("_253", cs));}, _255: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_254", cs), new Int(0));}, _256: function(cs){return new Suffix("heltal", Editor.concretes["EditorSwe"].rule("_3", cs));}, _26: function(cs){return Editor.concretes["EditorSwe"].rule("_25", cs).sel(new Int(0));}, _27: function(cs){return Editor.concretes["EditorSwe"].rule("_26", cs).sel(new Int(0));}, _274: function(cs){return new Suffix("språk", Editor.concretes["EditorSwe"].rule("_3", cs));}, _28: function(cs){return Editor.concretes["EditorSwe"].rule("_25", cs).sel(new Int(1));}, _29: function(cs){return Editor.concretes["EditorSwe"].rule("_28", cs).sel(new Int(0));}, _3: function(cs){return new Arr(new Str(""), new Str("s"));}, _30: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_27", cs), Editor.concretes["EditorSwe"].rule("_27", cs), Editor.concretes["EditorSwe"].rule("_29", cs));}, _31: function(cs){return new Arr(new Int(0), new Int(0));}, _32: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_31", cs), Editor.concretes["EditorSwe"].rule("_31", cs));}, _33: function(cs){return new Arr(new Int(1), new Int(1));}, _34: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_33", cs), Editor.concretes["EditorSwe"].rule("_33", cs));}, _341: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs), new Str("mig"));}, _342: function(cs){return Editor.concretes["EditorSwe"].rule("_341", cs).sel(Editor.concretes["EditorSwe"].rule("_14", cs));}, _343: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs), new Str("sig"));}, _344: function(cs){return Editor.concretes["EditorSwe"].rule("_343", cs).sel(Editor.concretes["EditorSwe"].rule("_14", cs));}, _345: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_342", cs), Editor.concretes["EditorSwe"].rule("_64", cs), Editor.concretes["EditorSwe"].rule("_344", cs));}, _35: function(cs){return new Arr(new Int(1), new Int(2));}, _36: function(cs){return new Arr(new Int(2), new Int(2));}, _37: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_35", cs), Editor.concretes["EditorSwe"].rule("_36", cs));}, _38: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_32", cs), Editor.concretes["EditorSwe"].rule("_34", cs), Editor.concretes["EditorSwe"].rule("_37", cs));}, _382: function(cs){return new Suffix("träd", Editor.concretes["EditorSwe"].rule("_3", cs));}, _39: function(cs){return cs[1].sel(new Int(1));}, _40: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_39", cs), new Int(1), new Int(1));}, _401: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0], cs[0]);}, _403: function(cs){return new Arr(cs[0], cs[0]);}, _404: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_403", cs), Editor.concretes["EditorSwe"].rule("_403", cs));}, _405: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_404", cs), Editor.concretes["EditorSwe"].rule("_404", cs));}, _41: function(cs){return Editor.concretes["EditorSwe"].rule("_40", cs).sel(new Int(0));}, _42: function(cs){return Editor.concretes["EditorSwe"].rule("_38", cs).sel(Editor.concretes["EditorSwe"].rule("_41", cs));}, _43: function(cs){return Editor.concretes["EditorSwe"].rule("_40", cs).sel(new Int(1));}, _44: function(cs){return Editor.concretes["EditorSwe"].rule("_42", cs).sel(Editor.concretes["EditorSwe"].rule("_43", cs));}, _45: function(cs){return Editor.concretes["EditorSwe"].rule("_40", cs).sel(new Int(2));}, _46: function(cs){return Editor.concretes["EditorSwe"].rule("_44", cs).sel(Editor.concretes["EditorSwe"].rule("_45", cs));}, _47: function(cs){return Editor.concretes["EditorSwe"].rule("_30", cs).sel(Editor.concretes["EditorSwe"].rule("_46", cs));}, _48: function(cs){return new Seq();}, _49: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs));}, _50: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_49", cs), Editor.concretes["EditorSwe"].rule("_49", cs), Editor.concretes["EditorSwe"].rule("_49", cs));}, _51: function(cs){return new Arr(new Int(0), new Int(2));}, _52: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_51", cs), Editor.concretes["EditorSwe"].rule("_35", cs));}, _53: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_22", cs), new Int(0));}, _54: function(cs){return Editor.concretes["EditorSwe"].rule("_53", cs).sel(new Int(0));}, _55: function(cs){return Editor.concretes["EditorSwe"].rule("_52", cs).sel(Editor.concretes["EditorSwe"].rule("_54", cs));}, _56: function(cs){return Editor.concretes["EditorSwe"].rule("_53", cs).sel(new Int(1));}, _57: function(cs){return Editor.concretes["EditorSwe"].rule("_55", cs).sel(Editor.concretes["EditorSwe"].rule("_56", cs));}, _58: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_57", cs), new Int(2));}, _59: function(cs){return Editor.concretes["EditorSwe"].rule("_58", cs).sel(new Int(0));}, _60: function(cs){return Editor.concretes["EditorSwe"].rule("_50", cs).sel(Editor.concretes["EditorSwe"].rule("_59", cs));}, _61: function(cs){return Editor.concretes["EditorSwe"].rule("_58", cs).sel(new Int(1));}, _62: function(cs){return Editor.concretes["EditorSwe"].rule("_60", cs).sel(Editor.concretes["EditorSwe"].rule("_61", cs));}, _63: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_48", cs), Editor.concretes["EditorSwe"].rule("_48", cs), new Str("dig"));}, _64: function(cs){return Editor.concretes["EditorSwe"].rule("_63", cs).sel(Editor.concretes["EditorSwe"].rule("_14", cs));}, _67: function(cs){return Editor.concretes["EditorSwe"].rule("_19", cs).sel(new Int(0));}, _69: function(cs){return cs[3].sel(new Int(1));}, _71: function(cs){return Editor.concretes["EditorSwe"].rule("_24", cs).sel(new Int(2));}, _72: function(cs){return Editor.concretes["EditorSwe"].rule("_24", cs).sel(new Int(4));}, _73: function(cs){return Editor.concretes["EditorSwe"].rule("_24", cs).sel(new Int(6));}, _74: function(cs){return Editor.concretes["EditorSwe"].rule("_24", cs).sel(new Int(8));}, _75: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_25", cs), Editor.concretes["EditorSwe"].rule("_71", cs), Editor.concretes["EditorSwe"].rule("_72", cs), Editor.concretes["EditorSwe"].rule("_73", cs), Editor.concretes["EditorSwe"].rule("_74", cs));}, _76: function(cs){return new Arr(new Int(0), new Int(1));}, _77: function(cs){return Editor.concretes["EditorSwe"].rule("_76", cs).sel(Editor.concretes["EditorSwe"].rule("_69", cs));}, _78: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_77", cs), new Int(3), new Int(3));}, _79: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_77", cs), new Int(4), new Int(4));}, _80: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_78", cs), Editor.concretes["EditorSwe"].rule("_78", cs), Editor.concretes["EditorSwe"].rule("_79", cs));}, _81: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_69", cs), new Int(0));}, _82: function(cs){return Editor.concretes["EditorSwe"].rule("_81", cs).sel(new Int(0));}, _83: function(cs){return Editor.concretes["EditorSwe"].rule("_52", cs).sel(Editor.concretes["EditorSwe"].rule("_82", cs));}, _84: function(cs){return Editor.concretes["EditorSwe"].rule("_81", cs).sel(new Int(1));}, _85: function(cs){return Editor.concretes["EditorSwe"].rule("_83", cs).sel(Editor.concretes["EditorSwe"].rule("_84", cs));}, _86: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_85", cs), new Int(0));}, _92: function(cs){return cs[3].sel(new Int(0));}, _93: function(cs){return Editor.concretes["EditorSwe"].rule("_92", cs).sel(new Int(0));}, _94: function(cs){return Editor.concretes["EditorSwe"].rule("_93", cs).sel(new Int(0));}, _95: function(cs){return Editor.concretes["EditorSwe"].rule("_94", cs).sel(new Int(0));}, _97: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_85", cs), new Int(1));}, Adjective: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_401", cs), new Int(0));}, Determiner: function(cs){return new Arr(new Arr(Editor.concretes["EditorSwe"].rule("_405", cs), Editor.concretes["EditorSwe"].rule("_405", cs)), new Int(0));}, Noun: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_405", cs), new Int(0));}, Sentence: function(cs){return new Arr(cs[0]);}, Verb: function(cs){return new Arr(Editor.concretes["EditorSwe"].rule("_401", cs), cs[0], new Int(0));}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}, new Parser("Sentence",[new Rule(27, new FunApp("Copy",[]),[],[[],[new Terminal("Kopiera")]]), new Rule(27, new FunApp("Cut",[]),[],[[new Terminal("ut")],[new Terminal("Klipp")]]), new Rule(27, new FunApp("Delete",[]),[],[[],[new Terminal("Radera")]]), new Rule(27, new FunApp("Enter",[]),[],[[],[new Terminal("Skriv")]]), new Rule(27, new FunApp("Parse",[]),[],[[],[new Terminal("Parsa")]]), new Rule(27, new FunApp("Paste",[]),[],[[new Terminal("in")],[new Terminal("Klistra")]]), new Rule(27, new FunApp("Redo",[]),[],[[],[new Terminal("Upprepa")]]), new Rule(27, new FunApp("Refine",[]),[],[[],[new Terminal("Raffinera")]]), new Rule(27, new FunApp("Replace",[]),[],[[],[new Terminal("Ersätt")]]), new Rule(27, new FunApp("Select",[]),[],[[],[new Terminal("Välj")]]), new Rule(27, new FunApp("Show",[]),[],[[],[new Terminal("Visa")]]), new Rule(27, new FunApp("Undo",[]),[],[[],[new Terminal("Ångra")]]), new Rule(27, new FunApp("Wrap",[]),[],[[],[new Terminal("Förpacka")]]), new Rule(24, new FunApp("Wrapper",[]),[],[[new Terminal("förpackning")]]), new Rule(23, new FunApp("Wrapper",[]),[],[[new Terminal("förpacknings")]]), new Rule(22, new FunApp("Wrapper",[]),[],[[new Terminal("förpackningen")]]), new Rule(21, new FunApp("Wrapper",[]),[],[[new Terminal("förpackningens")]]), new Rule(20, new FunApp("Wrapper",[]),[],[[new Terminal("förpackningar")]]), new Rule(19, new FunApp("Wrapper",[]),[],[[new Terminal("förpackningars")]]), new Rule(18, new FunApp("Wrapper",[]),[],[[new Terminal("förpackningarna")]]), new Rule(17, new FunApp("Wrapper",[]),[],[[new Terminal("förpackningarnas")]]), new Rule(65, new FunApp("Wrap",[]),[],[[new Terminal("Förpackar")]]), new Rule(64, new FunApp("Wrap",[]),[],[[new Terminal("Förpackas")]]), new Rule(63, new FunApp("Wrap",[]),[],[[new Terminal("Förpacka")]]), new Rule(62, new FunApp("Wrap",[]),[],[[new Terminal("Förpackas")]]), new Rule(61, new FunApp("Wrap",[]),[],[[new Terminal("Förpacka")]]), new Rule(60, new FunApp("Wrap",[]),[],[[new Terminal("Förpackas")]]), new Rule(59, new FunApp("Wrap",[]),[],[[new Terminal("Förpackad")]]), new Rule(58, new FunApp("Wrap",[]),[],[[new Terminal("Förpackads")]]), new Rule(57, new FunApp("Wrap",[]),[],[[new Terminal("Förpackat")]]), new Rule(56, new FunApp("Wrap",[]),[],[[new Terminal("Förpackats")]]), new Rule(55, new FunApp("Wrap",[]),[],[[new Terminal("Förpackade")]]), new Rule(54, new FunApp("Wrap",[]),[],[[new Terminal("Förpackades")]]), new Rule(53, new FunApp("Wrap",[]),[],[[new Terminal("Förpackade")]]), new Rule(52, new FunApp("Wrap",[]),[],[[new Terminal("Förpackades")]]), new Rule(51, new FunApp("Wrap",[]),[],[[new Terminal("Förpackade")]]), new Rule(50, new FunApp("Wrap",[]),[],[[new Terminal("Förpackades")]]), new Rule(49, new FunApp("Wrap",[]),[],[[]]), new Rule(65, new FunApp("Undo",[]),[],[[new Terminal("Ångrar")]]), new Rule(64, new FunApp("Undo",[]),[],[[new Terminal("Ångras")]]), new Rule(63, new FunApp("Undo",[]),[],[[new Terminal("Ångra")]]), new Rule(62, new FunApp("Undo",[]),[],[[new Terminal("Ångras")]]), new Rule(61, new FunApp("Undo",[]),[],[[new Terminal("Ångra")]]), new Rule(60, new FunApp("Undo",[]),[],[[new Terminal("Ångras")]]), new Rule(59, new FunApp("Undo",[]),[],[[new Terminal("Ångrad")]]), new Rule(58, new FunApp("Undo",[]),[],[[new Terminal("Ångrads")]]), new Rule(57, new FunApp("Undo",[]),[],[[new Terminal("Ångrat")]]), new Rule(56, new FunApp("Undo",[]),[],[[new Terminal("Ångrats")]]), new Rule(55, new FunApp("Undo",[]),[],[[new Terminal("Ångrade")]]), new Rule(54, new FunApp("Undo",[]),[],[[new Terminal("Ångrades")]]), new Rule(53, new FunApp("Undo",[]),[],[[new Terminal("Ångrade")]]), new Rule(52, new FunApp("Undo",[]),[],[[new Terminal("Ångrades")]]), new Rule(51, new FunApp("Undo",[]),[],[[new Terminal("Ångrade")]]), new Rule(50, new FunApp("Undo",[]),[],[[new Terminal("Ångrades")]]), new Rule(49, new FunApp("Undo",[]),[],[[]]), new Rule(30, new FunApp("Tree",[]),[],[[new Terminal("träd")]]), new Rule(83, new FunApp("Tree",[]),[],[[new Terminal("träds")]]), new Rule(33, new FunApp("Tree",[]),[],[[new Terminal("trädet")]]), new Rule(82, new FunApp("Tree",[]),[],[[new Terminal("trädets")]]), new Rule(81, new FunApp("Tree",[]),[],[[new Terminal("träd")]]), new Rule(80, new FunApp("Tree",[]),[],[[new Terminal("träds")]]), new Rule(79, new FunApp("Tree",[]),[],[[new Terminal("träden")]]), new Rule(78, new FunApp("Tree",[]),[],[[new Terminal("trädens")]]), new Rule(24, new FunApp("Swedish",[]),[],[[new Terminal("Svenska")]]), new Rule(23, new FunApp("Swedish",[]),[],[[new Terminal("Svenskas")]]), new Rule(22, new FunApp("Swedish",[]),[],[[new Terminal("Svenskan")]]), new Rule(21, new FunApp("Swedish",[]),[],[[new Terminal("Svenskans")]]), new Rule(20, new FunApp("Swedish",[]),[],[[new Terminal("Svenskor")]]), new Rule(19, new FunApp("Swedish",[]),[],[[new Terminal("Svenskors")]]), new Rule(18, new FunApp("Swedish",[]),[],[[new Terminal("Svenskorna")]]), new Rule(17, new FunApp("Swedish",[]),[],[[new Terminal("Svenskornas")]]), new Rule(24, new FunApp("String_N",[]),[],[[new Terminal("sträng")]]), new Rule(23, new FunApp("String_N",[]),[],[[new Terminal("strängs")]]), new Rule(22, new FunApp("String_N",[]),[],[[new Terminal("strängen")]]), new Rule(21, new FunApp("String_N",[]),[],[[new Terminal("strängens")]]), new Rule(20, new FunApp("String_N",[]),[],[[new Terminal("strängar")]]), new Rule(19, new FunApp("String_N",[]),[],[[new Terminal("strängars")]]), new Rule(18, new FunApp("String_N",[]),[],[[new Terminal("strängarna")]]), new Rule(17, new FunApp("String_N",[]),[],[[new Terminal("strängarnas")]]), new Rule(24, new FunApp("Spanish",[]),[],[[new Terminal("Spanska")]]), new Rule(23, new FunApp("Spanish",[]),[],[[new Terminal("Spanskas")]]), new Rule(22, new FunApp("Spanish",[]),[],[[new Terminal("Spanskan")]]), new Rule(21, new FunApp("Spanish",[]),[],[[new Terminal("Spanskans")]]), new Rule(20, new FunApp("Spanish",[]),[],[[new Terminal("Spanskor")]]), new Rule(19, new FunApp("Spanish",[]),[],[[new Terminal("Spanskors")]]), new Rule(18, new FunApp("Spanish",[]),[],[[new Terminal("Spanskorna")]]), new Rule(17, new FunApp("Spanish",[]),[],[[new Terminal("Spanskornas")]]), new Rule(25, new FunApp("SingleWordCommand",[new Arg(0)]),[36],[[new ArgProj(0, 1), new ArgProj(0, 0), new Terminal("dig")]]), new Rule(25, new FunApp("SingleWordCommand",[new Arg(0)]),[35],[[new ArgProj(0, 1), new ArgProj(0, 0)]]), new Rule(25, new FunApp("SingleWordCommand",[new Arg(0)]),[27],[[new ArgProj(0, 1), new ArgProj(0, 0)]]), new Rule(65, new FunApp("Show",[]),[],[[new Terminal("Visar")]]), new Rule(64, new FunApp("Show",[]),[],[[new Terminal("Visas")]]), new Rule(63, new FunApp("Show",[]),[],[[new Terminal("Visa")]]), new Rule(62, new FunApp("Show",[]),[],[[new Terminal("Visas")]]), new Rule(61, new FunApp("Show",[]),[],[[new Terminal("Visa")]]), new Rule(60, new FunApp("Show",[]),[],[[new Terminal("Visas")]]), new Rule(59, new FunApp("Show",[]),[],[[new Terminal("Visad")]]), new Rule(58, new FunApp("Show",[]),[],[[new Terminal("Visads")]]), new Rule(57, new FunApp("Show",[]),[],[[new Terminal("Visat")]]), new Rule(56, new FunApp("Show",[]),[],[[new Terminal("Visats")]]), new Rule(55, new FunApp("Show",[]),[],[[new Terminal("Visade")]]), new Rule(54, new FunApp("Show",[]),[],[[new Terminal("Visades")]]), new Rule(53, new FunApp("Show",[]),[],[[new Terminal("Visade")]]), new Rule(52, new FunApp("Show",[]),[],[[new Terminal("Visades")]]), new Rule(51, new FunApp("Show",[]),[],[[new Terminal("Visade")]]), new Rule(50, new FunApp("Show",[]),[],[[new Terminal("Visades")]]), new Rule(49, new FunApp("Show",[]),[],[[]]), new Rule(65, new FunApp("Select",[]),[],[[new Terminal("Väljer")]]), new Rule(64, new FunApp("Select",[]),[],[[new Terminal("Väljs")]]), new Rule(63, new FunApp("Select",[]),[],[[new Terminal("Välj")]]), new Rule(62, new FunApp("Select",[]),[],[[new Terminal("Väljs")]]), new Rule(61, new FunApp("Select",[]),[],[[new Terminal("Välja")]]), new Rule(60, new FunApp("Select",[]),[],[[new Terminal("Väljas")]]), new Rule(59, new FunApp("Select",[]),[],[[new Terminal("Väljt")]]), new Rule(58, new FunApp("Select",[]),[],[[new Terminal("Väljts")]]), new Rule(57, new FunApp("Select",[]),[],[[new Terminal("Väljt")]]), new Rule(56, new FunApp("Select",[]),[],[[new Terminal("Väljts")]]), new Rule(55, new FunApp("Select",[]),[],[[new Terminal("Väljta")]]), new Rule(54, new FunApp("Select",[]),[],[[new Terminal("Väljtas")]]), new Rule(53, new FunApp("Select",[]),[],[[new Terminal("Väljta")]]), new Rule(52, new FunApp("Select",[]),[],[[new Terminal("Väljtas")]]), new Rule(51, new FunApp("Select",[]),[],[[new Terminal("Väljta")]]), new Rule(50, new FunApp("Select",[]),[],[[new Terminal("Väljtas")]]), new Rule(49, new FunApp("Select",[]),[],[[]]), new Rule(24, new FunApp("Russian",[]),[],[[new Terminal("Ryska")]]), new Rule(23, new FunApp("Russian",[]),[],[[new Terminal("Ryskas")]]), new Rule(22, new FunApp("Russian",[]),[],[[new Terminal("Ryskan")]]), new Rule(21, new FunApp("Russian",[]),[],[[new Terminal("Ryskans")]]), new Rule(20, new FunApp("Russian",[]),[],[[new Terminal("Ryskor")]]), new Rule(19, new FunApp("Russian",[]),[],[[new Terminal("Ryskors")]]), new Rule(18, new FunApp("Russian",[]),[],[[new Terminal("Ryskorna")]]), new Rule(17, new FunApp("Russian",[]),[],[[new Terminal("Ryskornas")]]), new Rule(65, new FunApp("Replace",[]),[],[[new Terminal("Ersätter")]]), new Rule(64, new FunApp("Replace",[]),[],[[new Terminal("Ersätts")]]), new Rule(63, new FunApp("Replace",[]),[],[[new Terminal("Ersätt")]]), new Rule(62, new FunApp("Replace",[]),[],[[new Terminal("Ersätts")]]), new Rule(61, new FunApp("Replace",[]),[],[[new Terminal("Ersätta")]]), new Rule(60, new FunApp("Replace",[]),[],[[new Terminal("Ersättas")]]), new Rule(59, new FunApp("Replace",[]),[],[[new Terminal("Ersättt")]]), new Rule(58, new FunApp("Replace",[]),[],[[new Terminal("Ersättts")]]), new Rule(57, new FunApp("Replace",[]),[],[[new Terminal("Ersättt")]]), new Rule(56, new FunApp("Replace",[]),[],[[new Terminal("Ersättts")]]), new Rule(55, new FunApp("Replace",[]),[],[[new Terminal("Ersättta")]]), new Rule(54, new FunApp("Replace",[]),[],[[new Terminal("Ersätttas")]]), new Rule(53, new FunApp("Replace",[]),[],[[new Terminal("Ersättta")]]), new Rule(52, new FunApp("Replace",[]),[],[[new Terminal("Ersätttas")]]), new Rule(51, new FunApp("Replace",[]),[],[[new Terminal("Ersättta")]]), new Rule(50, new FunApp("Replace",[]),[],[[new Terminal("Ersätttas")]]), new Rule(49, new FunApp("Replace",[]),[],[[]]), new Rule(24, new FunApp("Refinement",[]),[],[[new Terminal("raffinemang")]]), new Rule(23, new FunApp("Refinement",[]),[],[[new Terminal("raffinemangs")]]), new Rule(22, new FunApp("Refinement",[]),[],[[new Terminal("raffinemangen")]]), new Rule(21, new FunApp("Refinement",[]),[],[[new Terminal("raffinemangens")]]), new Rule(20, new FunApp("Refinement",[]),[],[[new Terminal("raffinemangar")]]), new Rule(19, new FunApp("Refinement",[]),[],[[new Terminal("raffinemangars")]]), new Rule(18, new FunApp("Refinement",[]),[],[[new Terminal("raffinemangarna")]]), new Rule(17, new FunApp("Refinement",[]),[],[[new Terminal("raffinemangarnas")]]), new Rule(65, new FunApp("Refine",[]),[],[[new Terminal("Raffinerar")]]), new Rule(64, new FunApp("Refine",[]),[],[[new Terminal("Raffineras")]]), new Rule(63, new FunApp("Refine",[]),[],[[new Terminal("Raffinera")]]), new Rule(62, new FunApp("Refine",[]),[],[[new Terminal("Raffineras")]]), new Rule(61, new FunApp("Refine",[]),[],[[new Terminal("Raffinera")]]), new Rule(60, new FunApp("Refine",[]),[],[[new Terminal("Raffineras")]]), new Rule(59, new FunApp("Refine",[]),[],[[new Terminal("Raffinerad")]]), new Rule(58, new FunApp("Refine",[]),[],[[new Terminal("Raffinerads")]]), new Rule(57, new FunApp("Refine",[]),[],[[new Terminal("Raffinerat")]]), new Rule(56, new FunApp("Refine",[]),[],[[new Terminal("Raffinerats")]]), new Rule(55, new FunApp("Refine",[]),[],[[new Terminal("Raffinerade")]]), new Rule(54, new FunApp("Refine",[]),[],[[new Terminal("Raffinerades")]]), new Rule(53, new FunApp("Refine",[]),[],[[new Terminal("Raffinerade")]]), new Rule(52, new FunApp("Refine",[]),[],[[new Terminal("Raffinerades")]]), new Rule(51, new FunApp("Refine",[]),[],[[new Terminal("Raffinerade")]]), new Rule(50, new FunApp("Refine",[]),[],[[new Terminal("Raffinerades")]]), new Rule(49, new FunApp("Refine",[]),[],[[]]), new Rule(65, new FunApp("Redo",[]),[],[[new Terminal("Upprepar")]]), new Rule(64, new FunApp("Redo",[]),[],[[new Terminal("Upprepas")]]), new Rule(63, new FunApp("Redo",[]),[],[[new Terminal("Upprepa")]]), new Rule(62, new FunApp("Redo",[]),[],[[new Terminal("Upprepas")]]), new Rule(61, new FunApp("Redo",[]),[],[[new Terminal("Upprepa")]]), new Rule(60, new FunApp("Redo",[]),[],[[new Terminal("Upprepas")]]), new Rule(59, new FunApp("Redo",[]),[],[[new Terminal("Upprepad")]]), new Rule(58, new FunApp("Redo",[]),[],[[new Terminal("Upprepads")]]), new Rule(57, new FunApp("Redo",[]),[],[[new Terminal("Upprepat")]]), new Rule(56, new FunApp("Redo",[]),[],[[new Terminal("Upprepats")]]), new Rule(55, new FunApp("Redo",[]),[],[[new Terminal("Upprepade")]]), new Rule(54, new FunApp("Redo",[]),[],[[new Terminal("Upprepades")]]), new Rule(53, new FunApp("Redo",[]),[],[[new Terminal("Upprepade")]]), new Rule(52, new FunApp("Redo",[]),[],[[new Terminal("Upprepades")]]), new Rule(51, new FunApp("Redo",[]),[],[[new Terminal("Upprepade")]]), new Rule(50, new FunApp("Redo",[]),[],[[new Terminal("Upprepades")]]), new Rule(49, new FunApp("Redo",[]),[],[[]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[36, 34, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig"), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[36, 32, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig"), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[36, 31, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig"), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[36, 29, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig"), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[36, 28, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig"), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[36, 26, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig"), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[35, 34, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[35, 32, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[35, 31, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[35, 29, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[35, 28, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[35, 26, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[27, 34, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[27, 32, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[27, 31, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[27, 29, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[27, 28, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(25, new FunApp("RandomlyCommand",[new Arg(0), new Arg(1), new Arg(2)]),[27, 26, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("slumpmässigt")]]), new Rule(16, new FunApp("Previous",[]),[],[[new Terminal("föregående")]]), new Rule(15, new FunApp("Previous",[]),[],[[new Terminal("föregåendes")]]), new Rule(14, new FunApp("Previous",[]),[],[[new Terminal("föregående")]]), new Rule(13, new FunApp("Previous",[]),[],[[new Terminal("föregåendes")]]), new Rule(12, new FunApp("Previous",[]),[],[[new Terminal("föregående")]]), new Rule(11, new FunApp("Previous",[]),[],[[new Terminal("föregåendes")]]), new Rule(10, new FunApp("Previous",[]),[],[[new Terminal("föregående")]]), new Rule(9, new FunApp("Previous",[]),[],[[new Terminal("föregåendes")]]), new Rule(8, new FunApp("Previous",[]),[],[[new Terminal("föregående")]]), new Rule(7, new FunApp("Previous",[]),[],[[new Terminal("föregåendes")]]), new Rule(6, new FunApp("Previous",[]),[],[[]]), new Rule(5, new FunApp("Previous",[]),[],[[new Terminal("s")]]), new Rule(4, new FunApp("Previous",[]),[],[[]]), new Rule(3, new FunApp("Previous",[]),[],[[new Terminal("s")]]), new Rule(2, new FunApp("Previous",[]),[],[[new Terminal("a")]]), new Rule(1, new FunApp("Previous",[]),[],[[new Terminal("as")]]), new Rule(65, new FunApp("Paste",[]),[],[[new Terminal("Klistrar")]]), new Rule(64, new FunApp("Paste",[]),[],[[new Terminal("Klistras")]]), new Rule(63, new FunApp("Paste",[]),[],[[new Terminal("Klistra")]]), new Rule(62, new FunApp("Paste",[]),[],[[new Terminal("Klistras")]]), new Rule(61, new FunApp("Paste",[]),[],[[new Terminal("Klistra")]]), new Rule(60, new FunApp("Paste",[]),[],[[new Terminal("Klistras")]]), new Rule(59, new FunApp("Paste",[]),[],[[new Terminal("Klistrad")]]), new Rule(58, new FunApp("Paste",[]),[],[[new Terminal("Klistrads")]]), new Rule(57, new FunApp("Paste",[]),[],[[new Terminal("Klistrat")]]), new Rule(56, new FunApp("Paste",[]),[],[[new Terminal("Klistrats")]]), new Rule(55, new FunApp("Paste",[]),[],[[new Terminal("Klistrade")]]), new Rule(54, new FunApp("Paste",[]),[],[[new Terminal("Klistrades")]]), new Rule(53, new FunApp("Paste",[]),[],[[new Terminal("Klistrade")]]), new Rule(52, new FunApp("Paste",[]),[],[[new Terminal("Klistrades")]]), new Rule(51, new FunApp("Paste",[]),[],[[new Terminal("Klistrade")]]), new Rule(50, new FunApp("Paste",[]),[],[[new Terminal("Klistrades")]]), new Rule(49, new FunApp("Paste",[]),[],[[new Terminal("in")]]), new Rule(65, new FunApp("Parse",[]),[],[[new Terminal("Parsar")]]), new Rule(64, new FunApp("Parse",[]),[],[[new Terminal("Parsas")]]), new Rule(63, new FunApp("Parse",[]),[],[[new Terminal("Parsa")]]), new Rule(62, new FunApp("Parse",[]),[],[[new Terminal("Parsas")]]), new Rule(61, new FunApp("Parse",[]),[],[[new Terminal("Parsa")]]), new Rule(60, new FunApp("Parse",[]),[],[[new Terminal("Parsas")]]), new Rule(59, new FunApp("Parse",[]),[],[[new Terminal("Parsad")]]), new Rule(58, new FunApp("Parse",[]),[],[[new Terminal("Parsads")]]), new Rule(57, new FunApp("Parse",[]),[],[[new Terminal("Parsat")]]), new Rule(56, new FunApp("Parse",[]),[],[[new Terminal("Parsats")]]), new Rule(55, new FunApp("Parse",[]),[],[[new Terminal("Parsade")]]), new Rule(54, new FunApp("Parse",[]),[],[[new Terminal("Parsades")]]), new Rule(53, new FunApp("Parse",[]),[],[[new Terminal("Parsade")]]), new Rule(52, new FunApp("Parse",[]),[],[[new Terminal("Parsades")]]), new Rule(51, new FunApp("Parse",[]),[],[[new Terminal("Parsade")]]), new Rule(50, new FunApp("Parse",[]),[],[[new Terminal("Parsades")]]), new Rule(49, new FunApp("Parse",[]),[],[[]]), new Rule(24, new FunApp("Page",[]),[],[[new Terminal("sida")]]), new Rule(23, new FunApp("Page",[]),[],[[new Terminal("sidas")]]), new Rule(22, new FunApp("Page",[]),[],[[new Terminal("sidan")]]), new Rule(21, new FunApp("Page",[]),[],[[new Terminal("sidans")]]), new Rule(20, new FunApp("Page",[]),[],[[new Terminal("sidor")]]), new Rule(19, new FunApp("Page",[]),[],[[new Terminal("sidors")]]), new Rule(18, new FunApp("Page",[]),[],[[new Terminal("sidorna")]]), new Rule(17, new FunApp("Page",[]),[],[[new Terminal("sidornas")]]), new Rule(24, new FunApp("Norwegian",[]),[],[[new Terminal("Norska")]]), new Rule(23, new FunApp("Norwegian",[]),[],[[new Terminal("Norskas")]]), new Rule(22, new FunApp("Norwegian",[]),[],[[new Terminal("Norskan")]]), new Rule(21, new FunApp("Norwegian",[]),[],[[new Terminal("Norskans")]]), new Rule(20, new FunApp("Norwegian",[]),[],[[new Terminal("Norskor")]]), new Rule(19, new FunApp("Norwegian",[]),[],[[new Terminal("Norskors")]]), new Rule(18, new FunApp("Norwegian",[]),[],[[new Terminal("Norskorna")]]), new Rule(17, new FunApp("Norwegian",[]),[],[[new Terminal("Norskornas")]]), new Rule(24, new FunApp("Node",[]),[],[[new Terminal("nod")]]), new Rule(23, new FunApp("Node",[]),[],[[new Terminal("nods")]]), new Rule(22, new FunApp("Node",[]),[],[[new Terminal("noden")]]), new Rule(21, new FunApp("Node",[]),[],[[new Terminal("nodens")]]), new Rule(20, new FunApp("Node",[]),[],[[new Terminal("nodar")]]), new Rule(19, new FunApp("Node",[]),[],[[new Terminal("nodars")]]), new Rule(18, new FunApp("Node",[]),[],[[new Terminal("nodarna")]]), new Rule(17, new FunApp("Node",[]),[],[[new Terminal("nodarnas")]]), new Rule(16, new FunApp("Next",[]),[],[[new Terminal("näst")]]), new Rule(15, new FunApp("Next",[]),[],[[new Terminal("nästs")]]), new Rule(14, new FunApp("Next",[]),[],[[new Terminal("nästt")]]), new Rule(13, new FunApp("Next",[]),[],[[new Terminal("nästts")]]), new Rule(12, new FunApp("Next",[]),[],[[new Terminal("nästa")]]), new Rule(11, new FunApp("Next",[]),[],[[new Terminal("nästas")]]), new Rule(10, new FunApp("Next",[]),[],[[new Terminal("nästa")]]), new Rule(9, new FunApp("Next",[]),[],[[new Terminal("nästas")]]), new Rule(8, new FunApp("Next",[]),[],[[new Terminal("nästa")]]), new Rule(7, new FunApp("Next",[]),[],[[new Terminal("nästas")]]), new Rule(6, new FunApp("Next",[]),[],[[new Terminal("nästare")]]), new Rule(5, new FunApp("Next",[]),[],[[new Terminal("nästares")]]), new Rule(4, new FunApp("Next",[]),[],[[new Terminal("nästast")]]), new Rule(3, new FunApp("Next",[]),[],[[new Terminal("nästasts")]]), new Rule(2, new FunApp("Next",[]),[],[[new Terminal("nästaste")]]), new Rule(1, new FunApp("Next",[]),[],[[new Terminal("nästastes")]]), new Rule(30, new FunApp("Language",[]),[],[[new Terminal("språk")]]), new Rule(83, new FunApp("Language",[]),[],[[new Terminal("språks")]]), new Rule(33, new FunApp("Language",[]),[],[[new Terminal("språket")]]), new Rule(82, new FunApp("Language",[]),[],[[new Terminal("språkets")]]), new Rule(81, new FunApp("Language",[]),[],[[new Terminal("språk")]]), new Rule(80, new FunApp("Language",[]),[],[[new Terminal("språks")]]), new Rule(79, new FunApp("Language",[]),[],[[new Terminal("språken")]]), new Rule(78, new FunApp("Language",[]),[],[[new Terminal("språkens")]]), new Rule(25, new FunApp("Label",[new Arg(0)]),[96],[[new ArgProj(0, 0)]]), new Rule(96, new Arg(0),[30],[[new ArgProj(0, 0)]]), new Rule(96, new Arg(0),[24],[[new ArgProj(0, 0)]]), new Rule(24, new FunApp("Italian",[]),[],[[new Terminal("Italienska")]]), new Rule(23, new FunApp("Italian",[]),[],[[new Terminal("Italienskas")]]), new Rule(22, new FunApp("Italian",[]),[],[[new Terminal("Italienskan")]]), new Rule(21, new FunApp("Italian",[]),[],[[new Terminal("Italienskans")]]), new Rule(20, new FunApp("Italian",[]),[],[[new Terminal("Italienskor")]]), new Rule(19, new FunApp("Italian",[]),[],[[new Terminal("Italienskors")]]), new Rule(18, new FunApp("Italian",[]),[],[[new Terminal("Italienskorna")]]), new Rule(17, new FunApp("Italian",[]),[],[[new Terminal("Italienskornas")]]), new Rule(30, new FunApp("Integer_N",[]),[],[[new Terminal("heltal")]]), new Rule(83, new FunApp("Integer_N",[]),[],[[new Terminal("heltals")]]), new Rule(33, new FunApp("Integer_N",[]),[],[[new Terminal("heltalet")]]), new Rule(82, new FunApp("Integer_N",[]),[],[[new Terminal("heltalets")]]), new Rule(81, new FunApp("Integer_N",[]),[],[[new Terminal("heltal")]]), new Rule(80, new FunApp("Integer_N",[]),[],[[new Terminal("heltals")]]), new Rule(79, new FunApp("Integer_N",[]),[],[[new Terminal("heltalen")]]), new Rule(78, new FunApp("Integer_N",[]),[],[[new Terminal("heltalens")]]), new Rule(95, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(94, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(39, new FunApp("IndefSgDet",[]),[],[[new Terminal("en")]]), new Rule(46, new FunApp("IndefSgDet",[]),[],[[new Terminal("ett")]]), new Rule(93, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(92, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(26, new FunApp("IndefSgDet",[]),[],[[new Terminal("en")]]), new Rule(31, new FunApp("IndefSgDet",[]),[],[[new Terminal("ett")]]), new Rule(91, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(90, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(89, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(88, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(87, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(86, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(85, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(84, new FunApp("IndefSgDet",[]),[],[[]]), new Rule(95, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(94, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(39, new FunApp("IndefPlDet",[]),[],[[new Terminal("en")]]), new Rule(46, new FunApp("IndefPlDet",[]),[],[[new Terminal("ett")]]), new Rule(93, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(92, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(26, new FunApp("IndefPlDet",[]),[],[[new Terminal("en")]]), new Rule(31, new FunApp("IndefPlDet",[]),[],[[new Terminal("ett")]]), new Rule(91, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(90, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(89, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(88, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(87, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(86, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(85, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(84, new FunApp("IndefPlDet",[]),[],[[]]), new Rule(24, new FunApp("German",[]),[],[[new Terminal("Tyska")]]), new Rule(23, new FunApp("German",[]),[],[[new Terminal("Tyskas")]]), new Rule(22, new FunApp("German",[]),[],[[new Terminal("Tyskan")]]), new Rule(21, new FunApp("German",[]),[],[[new Terminal("Tyskans")]]), new Rule(20, new FunApp("German",[]),[],[[new Terminal("Tyskor")]]), new Rule(19, new FunApp("German",[]),[],[[new Terminal("Tyskors")]]), new Rule(18, new FunApp("German",[]),[],[[new Terminal("Tyskorna")]]), new Rule(17, new FunApp("German",[]),[],[[new Terminal("Tyskornas")]]), new Rule(24, new FunApp("French",[]),[],[[new Terminal("Franska")]]), new Rule(23, new FunApp("French",[]),[],[[new Terminal("Franskas")]]), new Rule(22, new FunApp("French",[]),[],[[new Terminal("Franskan")]]), new Rule(21, new FunApp("French",[]),[],[[new Terminal("Franskans")]]), new Rule(20, new FunApp("French",[]),[],[[new Terminal("Franskor")]]), new Rule(19, new FunApp("French",[]),[],[[new Terminal("Franskors")]]), new Rule(18, new FunApp("French",[]),[],[[new Terminal("Franskorna")]]), new Rule(17, new FunApp("French",[]),[],[[new Terminal("Franskornas")]]), new Rule(30, new FunApp("Float_N",[]),[],[[new Terminal("flyttal")]]), new Rule(83, new FunApp("Float_N",[]),[],[[new Terminal("flyttals")]]), new Rule(33, new FunApp("Float_N",[]),[],[[new Terminal("flyttalet")]]), new Rule(82, new FunApp("Float_N",[]),[],[[new Terminal("flyttalets")]]), new Rule(81, new FunApp("Float_N",[]),[],[[new Terminal("flyttal")]]), new Rule(80, new FunApp("Float_N",[]),[],[[new Terminal("flyttals")]]), new Rule(79, new FunApp("Float_N",[]),[],[[new Terminal("flyttalen")]]), new Rule(78, new FunApp("Float_N",[]),[],[[new Terminal("flyttalens")]]), new Rule(24, new FunApp("Finnish",[]),[],[[new Terminal("Finska")]]), new Rule(23, new FunApp("Finnish",[]),[],[[new Terminal("Finskas")]]), new Rule(22, new FunApp("Finnish",[]),[],[[new Terminal("Finskan")]]), new Rule(21, new FunApp("Finnish",[]),[],[[new Terminal("Finskans")]]), new Rule(20, new FunApp("Finnish",[]),[],[[new Terminal("Finskor")]]), new Rule(19, new FunApp("Finnish",[]),[],[[new Terminal("Finskors")]]), new Rule(18, new FunApp("Finnish",[]),[],[[new Terminal("Finskorna")]]), new Rule(17, new FunApp("Finnish",[]),[],[[new Terminal("Finskornas")]]), new Rule(25, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[44, 30],[[new Terminal("det"), new Terminal("finns"), new Terminal("inte"), new Terminal("ett"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(25, new FunApp("ErrorMessage",[new Arg(0), new Arg(1)]),[37, 24],[[new Terminal("det"), new Terminal("finns"), new Terminal("inte"), new Terminal("en"), new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(65, new FunApp("Enter",[]),[],[[new Terminal("Skriver")]]), new Rule(64, new FunApp("Enter",[]),[],[[new Terminal("Skrivs")]]), new Rule(63, new FunApp("Enter",[]),[],[[new Terminal("Skriv")]]), new Rule(62, new FunApp("Enter",[]),[],[[new Terminal("Skrivs")]]), new Rule(61, new FunApp("Enter",[]),[],[[new Terminal("Skriva")]]), new Rule(60, new FunApp("Enter",[]),[],[[new Terminal("Skrivas")]]), new Rule(59, new FunApp("Enter",[]),[],[[new Terminal("Skrivd")]]), new Rule(58, new FunApp("Enter",[]),[],[[new Terminal("Skrivds")]]), new Rule(57, new FunApp("Enter",[]),[],[[new Terminal("Skrivt")]]), new Rule(56, new FunApp("Enter",[]),[],[[new Terminal("Skrivts")]]), new Rule(55, new FunApp("Enter",[]),[],[[new Terminal("Skrivda")]]), new Rule(54, new FunApp("Enter",[]),[],[[new Terminal("Skrivdas")]]), new Rule(53, new FunApp("Enter",[]),[],[[new Terminal("Skrivda")]]), new Rule(52, new FunApp("Enter",[]),[],[[new Terminal("Skrivdas")]]), new Rule(51, new FunApp("Enter",[]),[],[[new Terminal("Skrivda")]]), new Rule(50, new FunApp("Enter",[]),[],[[new Terminal("Skrivdas")]]), new Rule(49, new FunApp("Enter",[]),[],[[]]), new Rule(24, new FunApp("English",[]),[],[[new Terminal("Engelska")]]), new Rule(23, new FunApp("English",[]),[],[[new Terminal("Engelskas")]]), new Rule(22, new FunApp("English",[]),[],[[new Terminal("Engelskan")]]), new Rule(21, new FunApp("English",[]),[],[[new Terminal("Engelskans")]]), new Rule(20, new FunApp("English",[]),[],[[new Terminal("Engelskor")]]), new Rule(19, new FunApp("English",[]),[],[[new Terminal("Engelskors")]]), new Rule(18, new FunApp("English",[]),[],[[new Terminal("Engelskorna")]]), new Rule(17, new FunApp("English",[]),[],[[new Terminal("Engelskornas")]]), new Rule(65, new FunApp("Delete",[]),[],[[new Terminal("Raderar")]]), new Rule(64, new FunApp("Delete",[]),[],[[new Terminal("Raderas")]]), new Rule(63, new FunApp("Delete",[]),[],[[new Terminal("Radera")]]), new Rule(62, new FunApp("Delete",[]),[],[[new Terminal("Raderas")]]), new Rule(61, new FunApp("Delete",[]),[],[[new Terminal("Radera")]]), new Rule(60, new FunApp("Delete",[]),[],[[new Terminal("Raderas")]]), new Rule(59, new FunApp("Delete",[]),[],[[new Terminal("Raderad")]]), new Rule(58, new FunApp("Delete",[]),[],[[new Terminal("Raderads")]]), new Rule(57, new FunApp("Delete",[]),[],[[new Terminal("Raderat")]]), new Rule(56, new FunApp("Delete",[]),[],[[new Terminal("Raderats")]]), new Rule(55, new FunApp("Delete",[]),[],[[new Terminal("Raderade")]]), new Rule(54, new FunApp("Delete",[]),[],[[new Terminal("Raderades")]]), new Rule(53, new FunApp("Delete",[]),[],[[new Terminal("Raderade")]]), new Rule(52, new FunApp("Delete",[]),[],[[new Terminal("Raderades")]]), new Rule(51, new FunApp("Delete",[]),[],[[new Terminal("Raderade")]]), new Rule(50, new FunApp("Delete",[]),[],[[new Terminal("Raderades")]]), new Rule(49, new FunApp("Delete",[]),[],[[]]), new Rule(77, new FunApp("DefSgDet",[]),[],[[new Terminal("den")]]), new Rule(76, new FunApp("DefSgDet",[]),[],[[new Terminal("det")]]), new Rule(43, new FunApp("DefSgDet",[]),[],[[new Terminal("den")]]), new Rule(48, new FunApp("DefSgDet",[]),[],[[new Terminal("det")]]), new Rule(75, new FunApp("DefSgDet",[]),[],[[new Terminal("den")]]), new Rule(74, new FunApp("DefSgDet",[]),[],[[new Terminal("det")]]), new Rule(29, new FunApp("DefSgDet",[]),[],[[]]), new Rule(34, new FunApp("DefSgDet",[]),[],[[]]), new Rule(73, new FunApp("DefSgDet",[]),[],[[new Terminal("de")]]), new Rule(72, new FunApp("DefSgDet",[]),[],[[new Terminal("de")]]), new Rule(71, new FunApp("DefSgDet",[]),[],[[new Terminal("de")]]), new Rule(70, new FunApp("DefSgDet",[]),[],[[new Terminal("de")]]), new Rule(69, new FunApp("DefSgDet",[]),[],[[new Terminal("de")]]), new Rule(68, new FunApp("DefSgDet",[]),[],[[new Terminal("de")]]), new Rule(67, new FunApp("DefSgDet",[]),[],[[]]), new Rule(66, new FunApp("DefSgDet",[]),[],[[]]), new Rule(77, new FunApp("DefPlDet",[]),[],[[new Terminal("den")]]), new Rule(76, new FunApp("DefPlDet",[]),[],[[new Terminal("det")]]), new Rule(43, new FunApp("DefPlDet",[]),[],[[new Terminal("den")]]), new Rule(48, new FunApp("DefPlDet",[]),[],[[new Terminal("det")]]), new Rule(75, new FunApp("DefPlDet",[]),[],[[new Terminal("den")]]), new Rule(74, new FunApp("DefPlDet",[]),[],[[new Terminal("det")]]), new Rule(29, new FunApp("DefPlDet",[]),[],[[]]), new Rule(34, new FunApp("DefPlDet",[]),[],[[]]), new Rule(73, new FunApp("DefPlDet",[]),[],[[new Terminal("de")]]), new Rule(72, new FunApp("DefPlDet",[]),[],[[new Terminal("de")]]), new Rule(71, new FunApp("DefPlDet",[]),[],[[new Terminal("de")]]), new Rule(70, new FunApp("DefPlDet",[]),[],[[new Terminal("de")]]), new Rule(69, new FunApp("DefPlDet",[]),[],[[new Terminal("de")]]), new Rule(68, new FunApp("DefPlDet",[]),[],[[new Terminal("de")]]), new Rule(67, new FunApp("DefPlDet",[]),[],[[]]), new Rule(66, new FunApp("DefPlDet",[]),[],[[]]), new Rule(24, new FunApp("Danish",[]),[],[[new Terminal("Danska")]]), new Rule(23, new FunApp("Danish",[]),[],[[new Terminal("Danskas")]]), new Rule(22, new FunApp("Danish",[]),[],[[new Terminal("Danskan")]]), new Rule(21, new FunApp("Danish",[]),[],[[new Terminal("Danskans")]]), new Rule(20, new FunApp("Danish",[]),[],[[new Terminal("Danskor")]]), new Rule(19, new FunApp("Danish",[]),[],[[new Terminal("Danskors")]]), new Rule(18, new FunApp("Danish",[]),[],[[new Terminal("Danskorna")]]), new Rule(17, new FunApp("Danish",[]),[],[[new Terminal("Danskornas")]]), new Rule(65, new FunApp("Cut",[]),[],[[new Terminal("Klipper")]]), new Rule(64, new FunApp("Cut",[]),[],[[new Terminal("Klipps")]]), new Rule(63, new FunApp("Cut",[]),[],[[new Terminal("Klipp")]]), new Rule(62, new FunApp("Cut",[]),[],[[new Terminal("Klipps")]]), new Rule(61, new FunApp("Cut",[]),[],[[new Terminal("Klippa")]]), new Rule(60, new FunApp("Cut",[]),[],[[new Terminal("Klippas")]]), new Rule(59, new FunApp("Cut",[]),[],[[new Terminal("Klippt")]]), new Rule(58, new FunApp("Cut",[]),[],[[new Terminal("Klippts")]]), new Rule(57, new FunApp("Cut",[]),[],[[new Terminal("Klippt")]]), new Rule(56, new FunApp("Cut",[]),[],[[new Terminal("Klippts")]]), new Rule(55, new FunApp("Cut",[]),[],[[new Terminal("Klippta")]]), new Rule(54, new FunApp("Cut",[]),[],[[new Terminal("Klipptas")]]), new Rule(53, new FunApp("Cut",[]),[],[[new Terminal("Klippta")]]), new Rule(52, new FunApp("Cut",[]),[],[[new Terminal("Klipptas")]]), new Rule(51, new FunApp("Cut",[]),[],[[new Terminal("Klippta")]]), new Rule(50, new FunApp("Cut",[]),[],[[new Terminal("Klipptas")]]), new Rule(49, new FunApp("Cut",[]),[],[[new Terminal("ut")]]), new Rule(65, new FunApp("Copy",[]),[],[[new Terminal("Kopierar")]]), new Rule(64, new FunApp("Copy",[]),[],[[new Terminal("Kopieras")]]), new Rule(63, new FunApp("Copy",[]),[],[[new Terminal("Kopiera")]]), new Rule(62, new FunApp("Copy",[]),[],[[new Terminal("Kopieras")]]), new Rule(61, new FunApp("Copy",[]),[],[[new Terminal("Kopiera")]]), new Rule(60, new FunApp("Copy",[]),[],[[new Terminal("Kopieras")]]), new Rule(59, new FunApp("Copy",[]),[],[[new Terminal("Kopierad")]]), new Rule(58, new FunApp("Copy",[]),[],[[new Terminal("Kopierads")]]), new Rule(57, new FunApp("Copy",[]),[],[[new Terminal("Kopierat")]]), new Rule(56, new FunApp("Copy",[]),[],[[new Terminal("Kopierats")]]), new Rule(55, new FunApp("Copy",[]),[],[[new Terminal("Kopierade")]]), new Rule(54, new FunApp("Copy",[]),[],[[new Terminal("Kopierades")]]), new Rule(53, new FunApp("Copy",[]),[],[[new Terminal("Kopierade")]]), new Rule(52, new FunApp("Copy",[]),[],[[new Terminal("Kopierades")]]), new Rule(51, new FunApp("Copy",[]),[],[[new Terminal("Kopierade")]]), new Rule(50, new FunApp("Copy",[]),[],[[new Terminal("Kopierades")]]), new Rule(49, new FunApp("Copy",[]),[],[[]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[36, 48, 40, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("dig")]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[36, 47, 40, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("dig")]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[36, 46, 44, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("dig")]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[36, 43, 40, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("dig")]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[36, 42, 40, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("dig")]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[36, 39, 37, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0), new Terminal("dig")]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[35, 48, 40, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[35, 47, 40, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[35, 46, 44, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[35, 43, 40, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[35, 42, 40, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[35, 39, 37, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[27, 48, 40, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[27, 47, 40, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[27, 46, 44, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(44, new Arg(0),[14],[[new ArgProj(0, 0)]]), new Rule(44, new Arg(0),[45],[[new ArgProj(0, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[27, 43, 40, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[27, 42, 40, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(40, new Arg(0),[10],[[new ArgProj(0, 0)]]), new Rule(40, new Arg(0),[41],[[new ArgProj(0, 0)]]), new Rule(25, new FunApp("CommandAdj",[new Arg(0), new Arg(1), new Arg(2), new Arg(3)]),[27, 39, 37, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new ArgProj(3, 0)]]), new Rule(37, new Arg(0),[16],[[new ArgProj(0, 0)]]), new Rule(37, new Arg(0),[38],[[new ArgProj(0, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[36, 34, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig")]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[36, 32, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig")]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[36, 31, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig")]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[36, 29, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig")]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[36, 28, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig")]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[36, 26, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0), new Terminal("dig")]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[35, 34, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[35, 32, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[35, 31, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[35, 29, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[35, 28, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[35, 26, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[27, 34, 33],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[27, 32, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[27, 31, 30],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[27, 29, 22],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[27, 28, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(25, new FunApp("Command",[new Arg(0), new Arg(1), new Arg(2)]),[27, 26, 24],[[new ArgProj(0, 1), new ArgProj(0, 0), new ArgProj(1, 0), new ArgProj(2, 0)]]), new Rule(24, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariska")]]), new Rule(23, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariskas")]]), new Rule(22, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariskan")]]), new Rule(21, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariskans")]]), new Rule(20, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariskor")]]), new Rule(19, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariskors")]]), new Rule(18, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariskorna")]]), new Rule(17, new FunApp("Bulgarian",[]),[],[[new Terminal("Bulgariskornas")]]), new Rule(16, new FunApp("Available",[]),[],[[new Terminal("tillgänglig")]]), new Rule(15, new FunApp("Available",[]),[],[[new Terminal("tillgängligs")]]), new Rule(14, new FunApp("Available",[]),[],[[new Terminal("tillgängligt")]]), new Rule(13, new FunApp("Available",[]),[],[[new Terminal("tillgängligts")]]), new Rule(12, new FunApp("Available",[]),[],[[new Terminal("tillgängliga")]]), new Rule(11, new FunApp("Available",[]),[],[[new Terminal("tillgängligas")]]), new Rule(10, new FunApp("Available",[]),[],[[new Terminal("tillgängliga")]]), new Rule(9, new FunApp("Available",[]),[],[[new Terminal("tillgängligas")]]), new Rule(8, new FunApp("Available",[]),[],[[new Terminal("tillgängliga")]]), new Rule(7, new FunApp("Available",[]),[],[[new Terminal("tillgängligas")]]), new Rule(6, new FunApp("Available",[]),[],[[new Terminal("tillgängligare")]]), new Rule(5, new FunApp("Available",[]),[],[[new Terminal("tillgängligares")]]), new Rule(4, new FunApp("Available",[]),[],[[new Terminal("tillgängligast")]]), new Rule(3, new FunApp("Available",[]),[],[[new Terminal("tillgängligasts")]]), new Rule(2, new FunApp("Available",[]),[],[[new Terminal("tillgängligaste")]]), new Rule(1, new FunApp("Available",[]),[],[[new Terminal("tillgängligastes")]])],{Adjective:[37, 38, 16, 15, 44, 45, 14, 13, 12, 11, 40, 41, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], Determiner:[95, 77, 91, 73, 93, 75, 87, 69, 39, 42, 43, 89, 71, 26, 28, 29, 85, 67, 94, 76, 90, 72, 92, 74, 86, 68, 46, 47, 48, 88, 70, 31, 32, 34, 84, 66], Float:[-3], Int:[-2], Noun:[96, 24, 30, 20, 81, 22, 33, 18, 79, 23, 83, 19, 80, 21, 82, 17, 78], Sentence:[25], String:[-1], Verb:[65, 49, 27, 36, 35, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50], _Var:[-4]}))}); diff --git a/old-lib/javascript/empty.png b/old-lib/javascript/empty.png Binary files differnew file mode 100644 index 000000000..35d9875df --- /dev/null +++ b/old-lib/javascript/empty.png diff --git a/old-lib/javascript/gfjseditor.js b/old-lib/javascript/gfjseditor.js new file mode 100644 index 000000000..5deb86160 --- /dev/null +++ b/old-lib/javascript/gfjseditor.js @@ -0,0 +1,1267 @@ +
+//Variable and Constant definitions
+
+var expColImg = new Array(2);
+expColImg[0] = new Image(12,12);
+expColImg[0].src = "minus.png";
+expColImg[1] = new Image(12,12);
+expColImg[1].src = "plus.png";
+expColImg[2] = new Image(12,12);
+expColImg[2].src = "empty.png";
+
+// Grammars
+var grammar = undefined;
+var editorGrammar = Editor;
+
+var selectedLanguage = "EditorEng";
+var selectedNode = "";
+var collapseBuffer = new Array();
+var abstractTree = new Fun ("?");
+
+var navigationControlString = new Array();
+var undoArray = new Array();
+var redoArray = new Array();
+var clipBoard;
+var refPageCounter = 0;
+
+var stringAbstractTree = undefined;
+var myTree = undefined;
+var parseTrees = undefined;
+
+var keys = new Array();
+keys ["Z"] = function() { clickUndo('actUndo'); }
+keys ["Y"] = function() { clickRedo('actRedo'); }
+keys ["R"] = function() { clickRefine('actRefine'); };
+keys ["V"] = function() { clickPaste('actPaste'); };
+keys ["X"] = function() { clickCut('actCut'); };
+keys ["C"] = function() { clickCopy('actCopy'); };
+keys ["D"] = function() { clickDelete('actDelete'); };
+keys ["E"] = function() { clickReplace('actReplace'); };
+keys ["W"] = function() { clickWrap('actWrap'); };
+keys ["P"] = function() { clickParse('actParse'); };
+keys ["N"] = function() { clickRandomNode('actRandomNode'); };
+keys ["T"] = function() { clickRandomTree('actRandomTree'); };
+keys ["%"] = function() { leftArrowKey(); };
+keys ["&"] = function() { upDownArrowKey(-1); };
+keys ["'"] = function() { rightArrowKey(); };
+keys ["("] = function() { upDownArrowKey( 1); };
+keys ["27"] = function() { clickEsc(); };
+
+function state(selectedNode, tree, collapseBuffer) {
+ this.selectedNode = selectedNode;
+ this.tree = grammar.abstract.copyTree(tree);
+ this.collapseBuffer = collapseBuffer;
+ return this;
+}
+
+function treeNode(name, caption) {
+ this.name = name;
+ this.caption = caption;
+ this.cat = "";
+ this.children = new Array();
+ this.collapsed = false;
+ return this;
+}
+
+treeNode.prototype.addChild = function (i, c) {
+ this.children[i] = c;
+}
+
+treeNode.prototype.hasChildren = function() {
+ return this.children.length;
+}
+
+/* -------------------------------------------------------------------------- */
+/* ----------------------------- GUI functions ----------------------------- */
+/* -------------------------------------------------------------------------- */
+
+
+// Creates an instance of the editor and stores it in the given HTML container.
+// Previous content is destroyed.
+function mkEditor(container, myGrammar) {
+ grammar = myGrammar;
+ myTree = treeFromAbstract(grammar.abstract.annotate(abstractTree, grammar.abstract.startcat), "0");
+ var holder = document.getElementById(container);
+ holder.innerHTML = "<div id='wrapper'><div id='absFrame'></div><div id='conFrame'></div><div id='actFrame'></div><div id='refFrame'></div><div id='messageFrame'></div><div id='clipboardFrame'></div></div>";
+ nodeClick('0', '?');
+}
+
+// Generates a tree from the string representation of an abstract tree contained in the element elementToParse
+function parseStringTree(elementToParse) {
+ stringAbstractTree = elementToParse;
+ abstractTree = grammar.abstract.handleLiterals(grammar.abstract.parseTree(document.getElementById(elementToParse).value, grammar.abstract.startcat));
+ myTree = treeFromAbstract(abstractTree, "0");
+ nodeClick("0");
+}
+
+// If a key is pressed and a function assigned to that key, calls the function
+function hotKeys(event) {
+ event = (event) ? event : ((window.event) ? event : null);
+ if (event) {
+ var charCode = (event.charCode) ? event.charCode : ((event.which) ? event.which : event.keyCode);
+ if (keys[String.fromCharCode(charCode).toUpperCase()] &&
+ !event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey) {
+ keys[String.fromCharCode(charCode).toUpperCase()]();
+ }
+ else if (keys["" + charCode] &&
+ !event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey) {
+ keys["" + charCode]();
+ }
+ else if (charCode >= "96" && charCode <= "105" &&
+ !event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey) {
+ keys["" + (charCode - 96)]();
+ }
+ }
+}
+
+// Clears "numeric" hotkeys
+function clearHotKeys() {
+ for (var key in keys) {
+ if ((parseInt(key) + 1) && (key != "27")) { keys[key] = function() { }; }
+ }
+}
+
+// Action to be performed when the up/down arrow key is pressed
+function upDownArrowKey(pos) {
+ var nodePos = getNavPos(selectedNode);
+ if ((nodePos > 0 && pos < 0) || (nodePos < navigationControlString.length - 1 && pos > 0)) {
+ nodeClick(navigationControlString[nodePos + pos]);
+ }
+}
+
+// Gets the position of a given node in the navigationControlString
+function getNavPos(nodeName) {
+ for (var i = 0, j = navigationControlString.length; i < j; i++) {
+ if (navigationControlString[i] == nodeName) { return i; };
+ }
+ return undefined;
+}
+
+// Given a name and a tree, gets the node in the tree with that name
+function getNode(nodeName, node) {
+ if (nodeName == node.name) {
+ return node;
+ }
+ else {
+ for (var i = 0, j = node.children.length; i < j; i++) {
+ var found = getNode(nodeName, node.children[i]);
+ if (found) { return found; }
+ }
+ }
+}
+
+// Action to be performed when the left arrow key is pressed
+function leftArrowKey() {
+ var node = getNode(selectedNode, myTree);
+ if (!node.collapsed && node.hasChildren()) {
+ signClick(node.name, node.caption);
+ }
+ else {
+ var parentNode = getParent(node.name, myTree);
+ if (parentNode) { nodeClick(parentNode.name); }
+ }
+}
+
+// Gets the parent of the selected node
+function getParent(nodeName, node) {
+ if (node.name == nodeName) {
+ return undefined;
+ }
+ else {
+ for (var i = 0, j = node.children.length; i < j; i++) {
+ if (node.children[i].name == nodeName) { return node; }
+ }
+ for (var i = 0, j = node.children.length; i < j; i++) {
+ var found = getParent(nodeName, node.children[i]);
+ if (found) { return found; }
+ }
+ }
+}
+
+// Action to be performed when the right arrow key is pressed
+function rightArrowKey() {
+ var node = getNode(selectedNode, myTree);
+ if (node.collapsed) {
+ signClick(node.name, node.caption);
+ }
+ else {
+ var firstDescendant = getfirstDescendant(node);
+ if (firstDescendant) {
+ nodeClick(firstDescendant.name);
+ }
+ }
+}
+
+// Gets the first descendant child of a node
+function getfirstDescendant(node) {
+ if (node.hasChildren() && !node.collapsed) { return node.children[0]; }
+ return undefined;
+}
+
+// Produces and displays an HTML representation of the tree
+function drawTree() {
+ var frame = document.getElementById("absFrame");
+ navigationControlString = new Array();
+ frame.innerHTML = "<ul id='tree'>" + getTree(myTree, 0) + "</ul>";
+ document.getElementById("link" + selectedNode).scrollIntoView(false);
+}
+
+// Produces an HTML representation of the tree
+function getTree(tree, level) {
+ navigationControlString[navigationControlString.length] = tree.name;
+ var htmlTree = new Array();
+ htmlTree.push("<li>");
+ if (tree.hasChildren()) {
+ htmlTree.push("<img class='tree-menu'");
+ if (tree.collapsed) {
+ htmlTree.push(" src='plus.png'");
+ }
+ else { htmlTree.push(" src='minus.png'"); }
+ htmlTree.push(" onclick='signClick(\"", tree.name, "\", \"", tree.caption, "\")' />");
+ }
+ else {
+ htmlTree.push("<img class='tree-menu' src='empty.png' />");
+ }
+ htmlTree.push("<a id='link", tree.name, "'");
+ if (document.getElementById("actRefine").className == "selected" ||
+ document.getElementById("actReplace").className == "selected" ||
+ document.getElementById("actWrap").className == "selected" ||
+ document.getElementById("actParse").className == "selected") {
+ htmlTree.push("class='treeGray' "); }
+ else if (selectedNode == tree.name) { htmlTree.push("class='treeSelected' "); }
+ else { htmlTree.push("class='tree' "); }
+ htmlTree.push("href='' onclick='nodeClick(\"", tree.name, "\"); return false'>");
+ if (tree.cat == "String" || tree.cat == "Int" || tree.cat == "Float") {
+ htmlTree.push(tree.caption.substring(tree.caption.lastIndexOf("_") + 1));
+ } else {
+ htmlTree.push(tree.caption);
+ }
+ htmlTree.push(" : ", tree.cat, "</a></li><ul>");
+ if (tree.hasChildren() && !tree.collapsed) {
+ for (var i = 0, j = tree.children.length; i < j; i++) {
+ htmlTree.push(getTree(tree.children[i], level + 1));
+ }
+ }
+ htmlTree.push("</ul>");
+ return htmlTree.join("");
+}
+
+// Linearizes and displays the abstract tree
+function drawLinearizedFrame() {
+ var frame = document.getElementById("conFrame");
+ frame.innerHTML = getLinearizedFrame();
+}
+
+// Linearizes the abstract tree and returns it in HTML form
+function getLinearizedFrame() {
+ var linearizedFrame = new Array();
+ for (var i in grammar.concretes) {
+ linearizedFrame.push("<h4>", i, "</h4>");
+ linearizedFrame.push("<p id='line", i, "'>");
+ var tokens = grammar.concretes[i].tagAndLinearize(abstractTree);
+ for (var j = 0, k = tokens.length; j < k; j++) {
+ linearizedFrame.push(createLinearized(tokens[j]));
+ }
+ linearizedFrame.push("</p>");
+ }
+ linearizedFrame.push("<h4>Abstract</h4>");
+ linearizedFrame.push("<p id='lineAbstract'>", createLinearizedFromAbstract(myTree, "0"), "</p>");
+ return linearizedFrame.join("");
+}
+
+// Creates an HTML representation of a linearization of an abstract tree
+function createLinearized(token) {
+ var node = getNode(token.tag, myTree);
+ var linearized = new Array()
+ linearized.push("<span id='", token.tag, "' class=");
+ if (node.name.substr(0, selectedNode.length) == selectedNode) {
+ linearized.push("'selected'");
+ }
+ else {
+ linearized.push("'normal'");
+ }
+ if (token == "&-") { linearized.push("<br />"); }
+ else { linearized.push(" onclick='nodeClick(\"", node.name, "\");'> ", token, " </span>"); }
+ return linearized.join("");
+}
+
+// Creates an HTML representation of the abstract tree
+function createLinearizedFromAbstract(node, path, prec) {
+ var linearized = new Array();
+ linearized.push("<span id='", path, "' class=");
+ if (node.name.substr(0, selectedNode.length) == selectedNode) {
+ linearized.push("'selected'");
+ }
+ else {
+ linearized.push("'normal'");
+ }
+ linearized.push(" onclick='nodeClick(\"", node.name, "\");'>");
+ if (node.children.length) { linearized.push(" ("); }
+ if (node.cat == "String" || node.cat == "Int" || node.cat == "Float") {
+ linearized.push(" ", node.caption.substring(node.caption.lastIndexOf("_") + 1), " ");
+ } else {
+ linearized.push(" ", node.caption, " ");
+ }
+ for (var i = 0, j = node.children.length; i < j; i++) {
+ linearized.push(createLinearizedFromAbstract(node.children[i], path + "-" + i, 1));
+ }
+ if (node.children.length) { linearized.push(") "); }
+ linearized.push("</span>");
+ return linearized.join("");
+}
+
+// Expands/Collapses node
+function signClick(name, caption) {
+ myTree = expandCollapse(myTree, name);
+ nodeClick(name);
+}
+
+// Sets the "collapsed" property of a given node
+function expandCollapse(node, name) {
+ if (node.name == name) {
+ if (wasCollapsed(node.name)) { removeFromCollapseBuffer(node.name); }
+ else { collapseBuffer[collapseBuffer.length] = node.name; }
+ node.collapsed ^= true;
+ }
+ else {
+ for (var i = 0, j = node.children.length; i < j; i++) {
+ expandCollapse(node.children[i], name);
+ }
+ }
+ return node;
+}
+
+// Checks if a node was collapsed on the previous cycle
+function wasCollapsed(nodeName) {
+ for (var i = 0, j = collapseBuffer.length; i < j; i++) {
+ if (nodeName == collapseBuffer[i]) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// Removes a node from the collapseBuffer array
+function removeFromCollapseBuffer(nodeName) {
+ var newBuffer = new Array();
+ for (var i = 0, j = collapseBuffer.length; i < j; i++) {
+ if (nodeName != collapseBuffer[i]) {
+ newBuffer[newBuffer.length] = collapseBuffer[i];
+ }
+ }
+ collapseBuffer = newBuffer;
+}
+
+// Selects a node
+function nodeClick(name) {
+ if ((document.getElementById("actRefine") && document.getElementById("actRefine").className == "selected") ||
+ (document.getElementById("actReplace") && document.getElementById("actReplace").className == "selected") ||
+ (document.getElementById("actWrap") && document.getElementById("actWrap").className == "selected") ||
+ (document.getElementById("actTree") && document.getElementById("actTree").className == "selected")) {
+ return; }
+ selectedNode = name;
+ if (stringAbstractTree) {
+ document.getElementById(stringAbstractTree).value = abstractTree.show();
+ }
+ document.getElementById("actFrame").innerHTML = showActions();
+ document.getElementById("refFrame").innerHTML = "";
+ document.getElementById("messageFrame").innerHTML = showLanguages();
+ document.getElementById(selectedLanguage).className = "selected";
+ applyLanguage();
+ drawTree();
+ drawLinearizedFrame();
+}
+
+// Shows the available languages for the editor
+function showLanguages() {
+ var languages = new Array();
+ languages.push("<table class='language' id='languagesTable'>",
+ "<tr id='langs' class='language'>",
+ "<td class='language' id='EditorDan' title='Label Bulgarian' onclick='clickLanguage(\"\")'>Bulgarian</td>",
+ "<td class='language' id='EditorDan' title='Label Danish' onclick='clickLanguage(\"\")'>Danish</td>",
+ "<td class='language' id='EditorEng' title='Label English' onclick='clickLanguage(\"EditorEng\")'>English</td>",
+ "<td class='language' id='EditorFin' title='Label Finnish' onclick='clickLanguage(\"\")'>Finnish</td>",
+ "<td class='language' id='EditorFre' title='Label French' onclick='clickLanguage(\"EditorFre\")'>French</td>",
+ "<td class='language' id='EditorGer' title='Label German' onclick='clickLanguage(\"\")'>German</td>",
+ "<td class='language' id='EditorIta' title='Label Italian' onclick='clickLanguage(\"\")'>Italian</td>",
+ "<td class='language' id='EditorNor' title='Label Norwegian' onclick='clickLanguage(\"\")'>Norwegian</td>",
+ "<td class='language' id='EditorRus' title='Label Russian' onclick='clickLanguage(\"\")'>Russian</td>",
+ "<td class='language' id='EditorSpa' title='Label Spanish' onclick='clickLanguage(\"EditorSpa\")'>Spanish</td>",
+ "<td class='language' id='EditorSwe' title='Label Swedish' onclick='clickLanguage(\"EditorSwe\")'>Swedish</td></tr>",
+ "</table>");
+ return languages.join("");
+}
+
+// Selects the language to use in the editor
+function clickLanguage(lang) {
+ if (lang) {
+ var tdsToClear = document.getElementById("languagesTable").getElementsByTagName("td");
+ for (var i = 0, j = tdsToClear.length; i < j; i++) {
+ if (tdsToClear[i].className == "selected") { tdsToClear[i].className = "language"; }
+ }
+ document.getElementById(lang).className = "selected";
+ selectedLanguage = lang;
+ applyLanguage();
+ }
+}
+
+// Applies a language to the editor
+function applyLanguage() {
+ var langsToLinearize = document.getElementById("languagesTable").getElementsByTagName("td");
+ for (var i = 0, j = langsToLinearize.length; i < j; i++) {
+ var absStr = langsToLinearize[i].getAttribute("title");
+ var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(absStr, editorGrammar.abstract.startcat));
+ lin = lin.substring(0,1).toUpperCase().concat(lin.substring(1))
+ if (!langsToLinearize[i].firstChild) {
+ var txt = document.createTextNode(lin);
+ langsToLinearize[i].appendChild(txt);
+ }
+ else {
+ langsToLinearize[i].firstChild.nodeValue = lin;
+ }
+ }
+ var actionsToLinearize = document.getElementById("actionsTable").getElementsByTagName("td");
+ for (var i = 0, j = actionsToLinearize.length; i < j; i++) {
+ if (actionsToLinearize[i].className == "action") {
+ var absStr = actionsToLinearize[i].getAttribute("title");
+ var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(absStr, editorGrammar.abstract.startcat));
+ lin = lin.substring(0,1).toUpperCase().concat(lin.substring(1))
+ if (!actionsToLinearize[i].firstChild) {
+ var txt = document.createTextNode(lin);
+ actionsToLinearize[i].appendChild(txt);
+ }
+ else {
+ actionsToLinearize[i].firstChild.nodeValue = lin;
+ }
+ }
+ }
+ var messageToLinearize = document.getElementById("refgenRefRandom");
+ if (messageToLinearize) {
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("RandomlyCommand Select IndefSgDet Refinement", editorGrammar.abstract.startcat));
+ messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
+ }
+ var messageToLinearize = document.getElementById("nextRefsNext");
+ if (messageToLinearize) {
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat));
+ messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
+ }
+ messageToLinearize = document.getElementById("nextRefsPrevious");
+ if (messageToLinearize) {
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat));
+ messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
+ }
+ var messageToLinearize = document.getElementById("nextWrapsNext");
+ if (messageToLinearize) {
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat));
+ messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
+ }
+ messageToLinearize = document.getElementById("nextWrapsPrevious");
+ if (messageToLinearize) {
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat));
+ messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
+ }
+}
+
+// Shows the available actions for a node
+function showActions(caption) {
+ var node = getNode(selectedNode, myTree);
+ var abstractNode = getNodeFromAbstract(abstractTree, node.name, "0");
+ var actions = new Array();
+ actions.push("<table class='action' id='actionsTable'>");
+ if (undoArray.length) {
+ actions.push(createAction("Undo", "action", "SingleWordCommand Undo", "Z")); }
+ else { actions.push(createAction("Undo", "unavailable", "SingleWordCommand Undo", "Z")); };
+ if (redoArray.length) {
+ actions.push(createAction("Redo", "action", "SingleWordCommand Redo", "Y")); }
+ else { actions.push(createAction("Redo", "unavailable", "SingleWordCommand Redo", "Y")); }
+ if (node.caption == "?") {
+ actions.push(createAction("Cut", "unavailable", "SingleWordCommand Cut", "X"));
+ actions.push(createAction("Copy", "unavailable", "SingleWordCommand Copy", "C"));
+ var AbsNodeType = abstractNode.type;
+ if (clipBoard && (AbsNodeType == grammar.abstract.getCat(clipBoard.name))) {
+ actions.push(createAction("Paste", "action", "SingleWordCommand Paste", "V"));
+ }
+ else { actions.push(createAction("Paste", "unavailable", "SingleWordCommand Paste", "V")); }
+ actions.push(createAction("Delete", "unavailable", "SingleWordCommand Delete", "D"));
+ actions.push(createAction("Refine", "action", "SingleWordCommand Refine", "R"));
+ actions.push(createAction("Replace", "unavailable", "SingleWordCommand Replace", "E"));
+ actions.push(createAction("Wrap", "unavailable", "SingleWordCommand Wrap", "W"));
+ for (var i in grammar.concretes) {
+ if (grammar.concretes[i].parser) {
+ actions.push(createAction("Parse", "action", "Command Parse IndefSgDet String_N", "P"));
+ } else { actions.push(createAction("Parse", "unavailable", "Command Parse IndefSgDet String_N", "P")); }
+ break;
+ }
+ }
+ else if (node.caption) {
+ actions.push(createAction("Cut", "action", "SingleWordCommand Cut", "X"));
+ actions.push(createAction("Copy", "action", "SingleWordCommand Copy", "C"));
+ actions.push(createAction("Paste", "unavailable", "SingleWordCommand Paste", "V"));
+ actions.push(createAction("Delete", "action", "SingleWordCommand Delete", "D"));
+ actions.push(createAction("Refine", "unavailable", "SingleWordCommand Refine", "R"));
+ actions.push(createAction("Replace", "action", "SingleWordCommand Replace", "E"));
+ actions.push(createAction("Wrap", "action", "SingleWordCommand Wrap", "W"));
+ actions.push(createAction("Parse", "unavailable", "Command Parse IndefSgDet String_N", "P"));
+ }
+ if (node && !abstractNode.isComplete()) {
+ actions.push(createAction("RandomNode", "action", "RandomlyCommand Refine DefSgDet Node", "N"));
+ }
+ else {
+ actions.push(createAction("RandomNode", "unavailable", "RandomlyCommand Refine DefSgDet Node", "N"));
+ }
+ if (!abstractTree.isComplete()) {
+ actions.push(createAction("RandomTree", "action", "RandomlyCommand Refine DefSgDet Tree", "T"));
+ }
+ else {
+ actions.push(createAction("RandomTree", "unavailable", "RandomlyCommand Refine DefSgDet Tree", "T"));
+ }
+ actions.push("</table>");
+ return actions.join("");
+
+}
+
+// Creates an action
+function createAction(actionName, className, caption, hotKey) {
+ return "<tr id='act" + actionName + "' class='" + className +"' onclick='click" +
+ actionName + "(\"act" + actionName + "\")'><td class='action' title='" +
+ caption + "'>" + caption + "</td><td class='hotKey'>(" + hotKey + ")</td></tr>";
+}
+
+// When the "Refine" action is selected, gets the appropriate refinements for a node
+function clickRefine(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ if (selectedNode) {
+ refPageCounter = 0;
+ var node = getNodeFromAbstract(abstractTree, selectedNode, "0");
+ if (node.type == "String" || node.type == "Int" || node.type == "Float") {
+ var newType = undefined;
+ var newTypeCat = node.type + "_Literal_";
+ switch(node.type)
+ {
+ case "String":
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet String_N", editorGrammar.abstract.startcat));
+ newType = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'String');
+ if (!newType) { newType = "AutoString"; }
+ break;
+ case "Int":
+ while (isNaN(newType) || (newType && newType.indexOf(".") != -1)) {
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet Integer_N", editorGrammar.abstract.startcat));
+ newType = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'Int');
+ }
+ if (!newType) { newType = "8"; }
+ break;
+ case "Float":
+ while (isNaN(newType)) {
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet Float_N", editorGrammar.abstract.startcat));
+ newType = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'Float');
+ }
+ if (!newType) { newType = "8.0"; }
+ if (newType.indexOf(".") == -1) { newType += ".0"; }
+ break;
+ }
+ if (node.type == "String") {
+ newTypeCat += "\"" + newType + "\"";
+ } else {
+ newTypeCat += newType;
+ }
+ if (!grammar.abstract.types[newTypeCat]) {
+ grammar.abstract.addType(newTypeCat, [], node.type);
+ for (var i in grammar.concretes) {
+ grammar.concretes[i].addRule(newTypeCat, function(cs){ return new Arr(new Str(newType));});
+ }
+ }
+ node.name = newTypeCat;
+ abstractTree = insertNode(abstractTree, selectedNode, "0", node);
+ document.getElementById("actFrame").innerHTML = showActions();
+ document.getElementById("refFrame").innerHTML = "";
+ clearHotKeys();
+ concludeAction();
+ } else {
+ document.getElementById("refFrame").innerHTML = showRefinements(selectedNode);
+ }
+ }
+ }
+}
+
+// Sets the className of actName to "selected" and grays out the other selections
+function highlightSelectedAction(actName) {
+ graySelections(actName);
+ document.getElementById(actName).className = "selected";
+ drawTree();
+}
+
+// Grays out all actions except one
+function graySelections(except) {
+ var refs = document.getElementById("actFrame").getElementsByTagName("tr");
+ for (var i = 0, j = refs.length; i < j; i++) {
+ if (refs[i].id != except) { refs[i].className = "closed"; }
+ }
+}
+
+// Pushes the abstract tree into the undo array and clears the redo array
+function pushUndoClearRedo() {
+ undoArray.push(new state(selectedNode, abstractTree, collapseBuffer));
+ redoArray.length = 0;
+}
+
+// Gets the refinements to display
+function showRefinements(nodeName) {
+ var refs = getAvailableRefinements(nodeName, abstractTree, grammar);
+ var rowsPerPage = 9;
+ var pages = Math.floor(refs.length / rowsPerPage);
+ var upperLimit;
+ if (pages != refPageCounter) { upperLimit = (rowsPerPage * refPageCounter) + rowsPerPage; }
+ else { upperLimit = refs.length; }
+ var refinements = new Array();
+ refinements.push("<table class='refinement'>");
+ var keyPos = 0;
+ refinements.push(ref_wrapToHtml("ref", "genRefRandom", "refinement", "", keyPos, "RandomlyCommand Select IndefSgDet Refinement"));
+ keys["" + keyPos] = mkRefHotKey("genRefRandom");
+ keyPos++;
+ for (var i = (rowsPerPage * refPageCounter), j = upperLimit; i < j; i++) {
+ refinements.push(ref_wrapToHtml("ref", refs[i], "refinement", "", keyPos, ""));
+ keys["" + keyPos] = mkRefHotKey(refs[i]);
+ keyPos++;
+ }
+ if (((refs.length % rowsPerPage == 0) && (pages - 1) > refPageCounter) ||
+ ((refs.length % rowsPerPage != 0) && pages > refPageCounter) ) {
+ refinements.push(ref_wrapNextRefsToHtml("nextRefs", "Next", "refinement", "+", editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat))));
+ keys["107"] = mkRefNextRefsHotKey("Next");
+ }
+ if (0 < refPageCounter) {
+ refinements.push(ref_wrapNextRefsToHtml("nextRefs", "Previous", "refinement", "-", editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat))));
+ keys["109"] = mkRefNextRefsHotKey("Previous");
+ }
+ refinements.push("</table>");
+ return refinements.join("");
+}
+
+// Creates an HTML representation of a Refinement/Wrap
+function ref_wrapToHtml(funct, name, className, arg, hotKeyPos, caption) {
+ var ref_wrapHtml = new Array();
+ ref_wrapHtml.push("<tr id='", funct, name, "' class=", className, " onclick='", funct, "Click(\"", name, "\"", arg, ")'><td class='", className, "'>");
+ if (caption) { ref_wrapHtml.push(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(caption, editorGrammar.abstract.startcat))); }
+ else { ref_wrapHtml.push(name, " : ", refArgsToHtml(name), grammar.abstract.getCat(name)); }
+ ref_wrapHtml.push("</td><td class='hotKey'>(", hotKeyPos, ")</td></tr>");
+ return ref_wrapHtml.join("");
+}
+
+// Creates the function to be used by a "numeric" hot key
+function mkRefHotKey(refName) {
+ return function() { if (document.getElementById("ref" + refName)) { refClick(refName); } }
+}
+
+// Creates an HTML representation of the Next/Previous Refinement/Wrap page
+function ref_wrapNextRefsToHtml(funct, name, className, hotKeyPos, caption) {
+ var ref_wrapHtml = new Array();
+ ref_wrapHtml.push("<tr id='", funct, name, "' class=", className, " onclick='", funct, "Click(\"", name, "\")'><td class='", className, "'>");
+ ref_wrapHtml.push(caption);
+ ref_wrapHtml.push("</td><td class='hotKey'>(", hotKeyPos, ")</td></tr>");
+ return ref_wrapHtml.join("");
+}
+
+// Creates the function to be used by a "+"/"-" hot key
+function mkRefNextRefsHotKey(refName) {
+ return function() { if (document.getElementById("nextRefs" + refName)) { nextRefsClick(refName); } }
+}
+
+// Creates a string representation of the arguments of a refinement
+function refArgsToHtml(fun) {
+ var args = new Array();
+ for (var i = 0, j = grammar.abstract.types[fun].args.length; i < j; i++) {
+ args.push(grammar.abstract.types[fun].args[i], " -> ");
+ }
+ return args.join("");
+}
+
+// Gets the type of a meta variable
+function getMetaType(absNode, route, currRoute) {
+ if (route == currRoute && absNode.isMeta()) {
+ return absNode.type;
+ }
+ else {
+ for (var i = 0, j = absNode.args.length; i < j; i++) {
+ var found = getMetaType(absNode.args[i], route, currRoute + "-" + i);
+ if (found) { return found };
+ }
+ }
+}
+
+// When the "Undo" action is selected, undoes the last action
+function clickUndo(actName) {
+ if (document.getElementById(actName).className == "action" && undoArray.length) {
+ highlightSelectedAction(actName);
+ redoArray.push(new state(selectedNode, abstractTree, collapseBuffer));
+ var prevState = undoArray.pop();
+ selectedNode = prevState.selectedNode;
+ abstractTree = grammar.abstract.copyTree(prevState.tree);
+ collapseBuffer = prevState.collapseBuffer;
+ if (abstractTree.isComplete()) { selectedNode = "0"; }
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ myTree = treeFromAbstract(abstractTree, "0");
+ nodeClick(selectedNode);
+ }
+}
+
+// When the "Redo" action is selected, redoes the last action
+function clickRedo(actName) {
+ if (document.getElementById(actName).className == "action" && redoArray.length) {
+ highlightSelectedAction(actName);
+ undoArray.push(new state(selectedNode, abstractTree, collapseBuffer));
+ var nextState = redoArray.pop();
+ selectedNode = nextState.selectedNode;
+ abstractTree = grammar.abstract.copyTree(nextState.tree);
+ collapseBuffer = nextState.collapseBuffer;
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ myTree = treeFromAbstract(abstractTree, "0");
+ nodeClick(selectedNode);
+ }
+}
+
+// When the "Copy" action is selected, copies the selected node to the clipboard
+function clickCopy(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ if (selectedNode) {
+ clipBoard = grammar.abstract.copyTree(getNodeFromAbstract(abstractTree, selectedNode, "0"));
+ document.getElementById("clipboardFrame").innerHTML = clipBoard.name + " : " + grammar.abstract.getCat(clipBoard.name);
+ nodeClick(selectedNode);
+ }
+ }
+}
+
+// When the "Cut" action is selected, deletes the selected node and copies it to the clipboard
+function clickCut(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ if (selectedNode) {
+ clipBoard = grammar.abstract.copyTree(getNodeFromAbstract(abstractTree, selectedNode, "0"));
+ document.getElementById("clipboardFrame").innerHTML = clipBoard.name + " : " + grammar.abstract.getCat(clipBoard.name);
+ abstractTree = deleteNode(abstractTree, selectedNode, "0");
+ concludeAction();
+ }
+ }
+}
+
+// Annotates the abstract tree, creates a tree from the abstract tree and selects the next meta variable
+function concludeAction() {
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ myTree = treeFromAbstract(abstractTree, "0");
+ selectNextMeta();
+}
+
+// Selects the next meta variable available
+function selectNextMeta() {
+ nodeClick(selectedNode);
+ if (!abstractTree.isComplete()) {
+ var pathToNextMeta = "";
+ var nodePos = getNavPos(selectedNode);
+ while (1) {
+ if (nodePos == navigationControlString.length) { nodePos = 0; }
+ var node = getNode(navigationControlString[nodePos], myTree);
+ if (node.caption == "?") { pathToNextMeta = node.name; break; }
+ nodePos++;
+ }
+ expandAscendants(pathToNextMeta);
+ nodeClick(pathToNextMeta);
+ }
+}
+
+// Expands the ascendants of a given node
+function expandAscendants(nodeName) {
+ var nodePath = nodeName.split("-");
+ var currAscendant = nodePath.shift();
+ while (nodePath.length > 0) {
+ var node = getNode(currAscendant, myTree);
+ if (node.collapsed) {
+ myTree = expandCollapse(myTree, currAscendant);
+ }
+ currAscendant += "-" + nodePath.shift();
+ }
+}
+
+// When the "Paste" action is selected, pastes the contents of the clipboard into the selected node
+function clickPaste(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ if (selectedNode) {
+ abstractTree = insertNode(abstractTree, selectedNode, "0", grammar.abstract.copyTree(clipBoard));
+ concludeAction();
+ }
+ }
+}
+
+// When the "Delete" action is selected, deletes the selected node
+function clickDelete(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ if (selectedNode) {
+ abstractTree = deleteNode(abstractTree, selectedNode, "0");
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ myTree = treeFromAbstract(abstractTree, "0");
+ nodeClick(selectedNode);
+ }
+ }
+}
+
+// When the "Replace" action is selected, replaces the selected node with another refinement
+function clickReplace(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ if (selectedNode) {
+ refPageCounter = 0;
+ abstractTree = deleteNode(abstractTree, selectedNode, "0");
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ myTree = treeFromAbstract(abstractTree, "0");
+ drawTree();
+ document.getElementById("refFrame").innerHTML = showRefinements(selectedNode);
+ }
+ }
+}
+
+// When the "Wrap" action is selected, wraps around the selected node with another refinement
+function clickWrap(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ var node = getNode(selectedNode, myTree);
+ if (selectedNode) {
+ refPageCounter = 0;
+ var wrappers = showWrappers(node.caption);
+ document.getElementById("refFrame").innerHTML = wrappers;
+ if (wrappers.length <= 31) {
+ var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("ErrorMessage Available Wrapper", editorGrammar.abstract.startcat));
+ alert(lin.substring(0,1).toUpperCase().concat(lin.substring(1)));
+ document.getElementById("actFrame").innerHTML = showActions();
+ nodeClick(selectedNode);
+ }
+ }
+ }
+}
+
+// Gets the wrappers to display
+function showWrappers(nodeCaption) {
+ var nodeType = grammar.abstract.types[nodeCaption].cat;
+ var rowsPerPage = 10;
+ var availWrappers = getAvailableWrappers(nodeType, grammar, selectedNode);
+ var pages = Math.floor(availWrappers.length / rowsPerPage);
+ var upperLimit;
+ if (pages != refPageCounter) { upperLimit = (rowsPerPage * refPageCounter) + rowsPerPage; }
+ else { upperLimit = availWrappers.length; }
+ var wrappers = new Array();
+ wrappers.push("<table class='wrapper'>");
+ var keyPos = 0;
+ for (var i = (rowsPerPage * refPageCounter), j = upperLimit; i < j; i++) {
+ wrappers.push(ref_wrapToHtml("wrap", availWrappers[i][0], "wrapper", ", " + availWrappers[i][1], keyPos, ""));
+ keys["" + keyPos] = mkWrapHotKey(availWrappers[i][0], availWrappers[i][1]);
+ keyPos++;
+ }
+ if (((availWrappers.length % rowsPerPage == 0) && (pages - 1) > refPageCounter) ||
+ ((availWrappers.length % rowsPerPage != 0) && pages > refPageCounter) ) {
+ wrappers.push(ref_wrapNextRefsToHtml("nextWraps", "Next", "wrapper", "+", editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat))));
+ keys["107"] = mkWrapNextRefsHotKey("Next");
+ }
+ if (0 < refPageCounter) {
+ wrappers.push(ref_wrapNextRefsToHtml("nextWraps", "Previous", "wrapper", "-", editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat))));
+ keys["109"] = mkWrapNextRefsHotKey("Previous");
+ }
+ wrappers.push("</table>");
+ return wrappers.join("");
+}
+
+// Creates the function to be used by a "numeric" hot key
+function mkWrapHotKey(wrapName, argPos) {
+ return function() { if (document.getElementById("wrap" + wrapName)) { wrapClick(wrapName, argPos); } }
+}
+
+// Creates the function to be used by a "+"/"-" hot key
+function mkWrapNextRefsHotKey(wrapName) {
+ return function() { if (document.getElementById("nextWraps" + wrapName)) { nextWrapsClick(wrapName); } }
+}
+
+// When the "Parse" action is selected, asks the user for a string and parses it
+// to generate the subnode
+function clickParse(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ var node = getNode(selectedNode, myTree);
+ if (selectedNode) {
+ refPageCounter = 0;
+ parseTrees = undefined;
+ var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet String_N", editorGrammar.abstract.startcat));
+ var string = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'String');
+ if (string || string == "") {
+ for (var i in grammar.concretes) {
+ parseTrees = grammar.concretes[i].parser.parseString(string, node.cat);
+ if (parseTrees.length == 1) {
+ pushUndoClearRedo();
+ abstractTree = insertNode(abstractTree, selectedNode, "0", grammar.abstract.copyTree(grammar.abstract.handleLiterals(parseTrees[0], node.cat)));
+ document.getElementById("actFrame").innerHTML = showActions();
+ document.getElementById("refFrame").innerHTML = "";
+ clearHotKeys();
+ concludeAction();
+ return false;
+ } else if (parseTrees.length > 1) {
+ document.getElementById("refFrame").innerHTML = showTrees();
+ return false;
+ }
+ }
+ } else { nodeClick(selectedNode); return false; }
+ var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("ErrorMessage Available Tree", editorGrammar.abstract.startcat));
+ alert(lin.substring(0,1).toUpperCase().concat(lin.substring(1)));
+ }
+ nodeClick(selectedNode);
+ }
+}
+
+// Displays the parse trees in the refinements panel
+function showTrees() {
+ var rowsPerPage = 10;
+ var pages = Math.floor(parseTrees.length / rowsPerPage);
+ var upperLimit;
+ if (pages != refPageCounter) { upperLimit = (rowsPerPage * refPageCounter) + rowsPerPage; }
+ else { upperLimit = parseTrees.length; }
+ var htmlTrees = new Array();
+ htmlTrees.push("<table class='tree'>");
+ var keyPos = 0;
+ for (var i = (rowsPerPage * refPageCounter), j = upperLimit; i < j; i++) {
+ htmlTrees.push(treeToHtml(i, keyPos, ""));
+ keys["" + keyPos] = mkTreeHotKey(i, keyPos);
+ keyPos++;
+ }
+ if (((parseTrees.length % rowsPerPage == 0) && (pages - 1) > refPageCounter) ||
+ ((parseTrees.length % rowsPerPage != 0) && pages > refPageCounter) ) {
+ htmlTrees.push(ref_wrapNextRefsToHtml("nextTrees", "Next", "tree", "+", editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat))));
+ keys["107"] = mkTreeNextRefsHotKey("Next");
+ }
+ if (refPageCounter > 0) {
+ htmlTrees.push(ref_wrapNextRefsToHtml("nextTrees", "Previous", "tree", "-", editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat))));
+ keys["109"] = mkTreeNextRefsHotKey("Previous");
+ }
+ htmlTrees.push("</table>");
+ return htmlTrees.join("");
+}
+
+// Creates an HTML representation of a parse Tree to be shown in the refinements panel
+function treeToHtml(i, hotKeyPos, caption) {
+ var htmlTree = new Array();
+ htmlTree.push("<tr id='tree", hotKeyPos, "' class='tree' onclick='treeClick(", i, ")'><td class='tree'>");
+ if (caption) { htmlTree.push(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(caption, editorGrammar.abstract.startcat))); }
+ else { htmlTree.push(parseTrees[i].show()); }
+ htmlTree.push("</td><td class='hotKey'>(", hotKeyPos, ")</td></tr>");
+ return htmlTree.join("");
+}
+
+// Creates the function to be used by a "numeric" hot key
+function mkTreeHotKey(i, keyPos) {
+ return function() { if (document.getElementById("tree" + keyPos)) { treeClick(i); } }
+}
+
+// Creates the function to be used by a "+"/"-" hot key
+function mkTreeNextRefsHotKey(treeName) {
+ return function() { if (document.getElementById("nextTrees" + treeName)) { nextTreesClick(treeName); } }
+}
+
+
+// When the "RandomNode" action is selected, refines the node at random
+function clickRandomNode(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ if (selectedNode) {
+ var tempTree = grammar.abstract.copyTree(abstractTree);
+ abstractTree = insertNode(tempTree, selectedNode, "0", grammar.abstract.copyTree(fillSubTree(grammar.abstract.copyTree(getNodeFromAbstract(abstractTree, selectedNode, "0")), grammar)));
+ concludeAction();
+ }
+ }
+}
+
+// When the "RandomTree" action is selected, refines the tree at random
+function clickRandomTree(actName) {
+ if (document.getElementById(actName).className == "action") {
+ highlightSelectedAction(actName);
+ pushUndoClearRedo();
+ abstractTree = grammar.abstract.copyTree(fillSubTree(abstractTree, grammar));
+ concludeAction();
+ }
+}
+
+// If a node is selected and is of type meta, it refines the node with a type refName
+function refClick(refName) {
+ if (selectedNode) {
+ if (refName == "genRefRandom") {
+ var refs = getAvailableRefinements(selectedNode, abstractTree, grammar);
+ refName = refs[Math.floor(refs.length * Math.random())];
+ }
+ abstractTree = refineAbstractTree(abstractTree, selectedNode, "0", refName);
+ document.getElementById("actFrame").innerHTML = showActions();
+ document.getElementById("refFrame").innerHTML = "";
+ clearHotKeys();
+ concludeAction();
+ }
+}
+
+// Creates a tree from an abstract tree
+function treeFromAbstract(abstractNode, name) {
+ var node = new treeNode(name, abstractNode.name);
+ if (node.caption == "?") {
+ node.cat = abstractNode.type; }
+ else {
+ if (grammar.abstract.types[node.caption]) {
+ node.cat = grammar.abstract.getCat(node.caption);
+ } else {
+ node.cat = node.caption.substring(0, node.caption.indexOf("_"));
+ grammar.abstract.addType(node.caption, [], node.cat);
+ var linStr = undefined;
+ if (node.cat == "String") {
+ linStr = node.caption.substring(node.caption.indexOf("\"") + 1, node.caption.length - 1);
+ } else {
+ linStr = node.caption.substring(node.caption.lastIndexOf("_") + 1)
+ }
+ for (var i in grammar.concretes) {
+ grammar.concretes[i].addRule(node.caption, function(cs){ return new Arr(new Str(linStr));});
+ }
+ }
+ }
+ if (wasCollapsed(node.name)) { node.collapsed = true; }
+ for (var i = 0, j = abstractNode.args.length; i < j; i++) {
+ node.addChild(i, treeFromAbstract(abstractNode.args[i], name + "-" + i));
+ }
+ return node
+}
+
+// Wraps a refinement around a node
+function wrapClick(wrapName, argPos) {
+ if (selectedNode) {
+ var tempNode = createRefinement(wrapName);
+ tempNode.setArg(argPos, grammar.abstract.copyTree(getNodeFromAbstract(abstractTree, selectedNode, "0")));
+ abstractTree = insertNode(abstractTree, selectedNode, "0", tempNode);
+ var cat = grammar.abstract.getCat(tempNode.name);
+ if (selectedNode == "0" && cat != grammar.abstract.startcat) {
+ grammar.abstract.startcat = cat;
+ }
+ document.getElementById("actFrame").innerHTML = showActions();
+ document.getElementById("refFrame").innerHTML = "";
+ clearHotKeys();
+ concludeAction();
+ }
+}
+
+// Wraps a refinement around a node
+function treeClick(i) {
+ if (selectedNode) {
+ pushUndoClearRedo();
+ var node = getNode(selectedNode, myTree);
+ var tempNode = grammar.abstract.copyTree(grammar.abstract.handleLiterals(parseTrees[i], node.cat));
+ abstractTree = insertNode(abstractTree, selectedNode, "0", tempNode);
+ document.getElementById("actFrame").innerHTML = showActions();
+ document.getElementById("refFrame").innerHTML = "";
+ clearHotKeys();
+ concludeAction();
+ }
+}
+
+// Handler for the escape key
+function clickEsc() {
+ if ((document.getElementById("actRefine").className == "selected" ||
+ document.getElementById("actReplace").className == "selected" ||
+ document.getElementById("actWrap").className == "selected" ||
+ document.getElementById("actParse").className == "selected") && undoArray.length) {
+ var prevState = undoArray.pop();
+ selectedNode = prevState.selectedNode;
+ abstractTree = grammar.abstract.copyTree(prevState.tree);
+ collapseBuffer = prevState.collapseBuffer;
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ myTree = treeFromAbstract(abstractTree, "0");
+ document.getElementById("actFrame").innerHTML = showActions();
+ if (selectedNode) { nodeClick(selectedNode) }
+ }
+}
+
+// If there are over ten refinements available shows only the selected nine
+function nextRefsClick(refName) {
+ if (refName == "Next") { refPageCounter++; } else { refPageCounter--; }
+ clearHotKeys();
+ document.getElementById("refFrame").innerHTML = showRefinements(selectedNode);
+}
+
+// If there are over ten wrappers available shows only the selected nine
+function nextWrapsClick(wrapName) {
+ if (wrapName == "Next") { refPageCounter++; } else { refPageCounter--; }
+ clearHotKeys();
+ var node = getNode(selectedNode, myTree);
+ document.getElementById("refFrame").innerHTML = showWrappers(node.caption);
+}
+
+// If there are over ten parse trees available shows only the selected nine
+function nextTreesClick(treeName) {
+ if (treeName == "Next") { refPageCounter++; } else { refPageCounter--; }
+ clearHotKeys();
+ document.getElementById("refFrame").innerHTML = showTrees();
+}
+
+/* -------------------------------------------------------------------------- */
+/* ---------- GUI independent functions to handle syntax editing ---------- */
+/* -------------------------------------------------------------------------- */
+
+// Gets the node rooted at the indicated path (route) in the tree absNode
+function getNodeFromAbstract(absNode, route, currRoute) {
+ if (route == currRoute) {
+ return absNode;
+ }
+ else {
+ for (var i = 0, j = absNode.args.length; i < j; i++) {
+ var found = getNodeFromAbstract(absNode.args[i], route, currRoute + "-" + i);
+ if (found) { return found; }
+ }
+ }
+}
+
+// Gets the first metavariable from the abstract tree rooted at the path route
+function getNextMetaFromAbstract(node, route) {
+ if (node.isMeta()) { return route; }
+ for (var i = 0, j = node.args.length; i < j; i++) {
+ var found = getNextMetaFromAbstract(node.args[i], route + "-" + i);
+ if (found) { return found; }
+ }
+}
+
+// Inserts the node into the abstract tree absNode at the path route
+function insertNode(absNode, route, currRoute, node) {
+ if (route == currRoute) {
+ return node;
+ }
+ else {
+ for (var i = 0, j = absNode.args.length; i < j; i++) {
+ absNode.setArg(i, insertNode(absNode.args[i], route, currRoute + "-" + i, node));
+ }
+ return absNode;
+ }
+}
+
+// Deletes the node rooted at the path route from the abstract tree absNode
+function deleteNode(absNode, route, currRoute) {
+ if (route == currRoute) {
+ return new Fun("?");
+ }
+ else {
+ for (var i = 0, j = absNode.args.length; i < j; i++) {
+ absNode.setArg(i, deleteNode(absNode.args[i], route, currRoute + "-" + i));
+ }
+ return absNode;
+ }
+}
+
+// Gets the available refinements for the node nodeName, which is in the tree
+// abstractTree, from those found in the grammar.
+function getAvailableRefinements(nodeName, abstractTree, grammar) {
+ var node = getNodeFromAbstract(abstractTree, nodeName, "0");
+ var metaType = node.type;
+ var refinements = new Array();
+ for (var fun in grammar.abstract.types) {
+ if (grammar.abstract.types[fun].cat == metaType) {
+ refinements[refinements.length] = fun;
+ }
+ }
+ return refinements;
+}
+
+// It refines the node rooted at the path route in the abstract tree absNode
+// with the refinement refName. Returns the refined abstract tree.
+function refineAbstractTree(absNode, route, currRoute, refName) {
+ if (route == currRoute && absNode.isMeta()) {
+ return createRefinement(refName);
+ }
+ else {
+ for (var i = 0, j = absNode.args.length; i < j; i++) {
+ absNode.setArg(i, refineAbstractTree(absNode.args[i], route, currRoute + "-" + i, refName));
+ }
+ return absNode;
+ }
+}
+
+// Creates a node of type refName object with the appropriate number of arguments
+function createRefinement(refName) {
+ var newRef = new Fun(refName);
+ for (var i = 0, j = grammar.abstract.types[refName].args.length; i < j; i++) {
+ newRef.setArg(i, new Fun("?"));
+ }
+ return newRef;
+}
+
+// Gets the available wrappers for a node of type nodeType found in the grammar
+function getAvailableWrappers(nodeType, grammar, top) {
+ var wrappers = new Array();
+ for (var fun in grammar.abstract.types) {
+ for (var i = 0, j = grammar.abstract.types[fun].args.length; i < j; i++) {
+ if (top != "0") {
+ if (grammar.abstract.types[fun].args[i] == nodeType && grammar.abstract.types[fun].cat == nodeType) {
+ wrappers[wrappers.length] = new Array(fun, i);
+ break;
+ }
+ } else {
+ if (grammar.abstract.types[fun].args[i] == nodeType) {
+ wrappers[wrappers.length] = new Array(fun, i);
+ break;
+ }
+ }
+ }
+ }
+ return wrappers;
+}
+
+// Instantiates metavariables found in the tree abstractTree with refinements
+// selected at random from those found in the grammar
+function fillSubTree(abstractTree, grammar) {
+ while (!abstractTree.isComplete()) {
+ var nodeToRefine = getNextMetaFromAbstract(abstractTree, "0");
+ if (nodeToRefine) {
+ var refs = getAvailableRefinements(nodeToRefine, abstractTree, grammar);
+ if (refs.length == 0) {
+ var node = getNodeFromAbstract(abstractTree, nodeToRefine, "0");
+ if (node.type == "String" || node.type == "Int" || node.type == "Float") {
+ var newType = undefined;
+ var newTypeCat = node.type + "_Literal_";
+ switch(node.type)
+ {
+ case "String":
+ newType = "AutoString";
+ break;
+ case "Int":
+ newType = "8";
+ break;
+ case "Float":
+ newType = "8.0";
+ break;
+ }
+ if (node.type == "String") {
+ newTypeCat += "\"" + newType + "\"";
+ } else {
+ newTypeCat += newType;
+ }
+ if (!grammar.abstract.types[newTypeCat]) {
+ grammar.abstract.addType(newTypeCat, [], node.type);
+ for (var i in grammar.concretes) {
+ grammar.concretes[i].addRule(newTypeCat, function(cs){ return new Arr(new Str(newType));});
+ }
+ }
+ node.name = newTypeCat;
+ abstractTree = insertNode(abstractTree, nodeToRefine, "0", node);
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ }
+ }
+ else {
+ var selectedRef = refs[Math.floor(refs.length * Math.random())];
+ abstractTree = refineAbstractTree(abstractTree, nodeToRefine, "0", selectedRef);
+ abstractTree = grammar.abstract.annotate(abstractTree, grammar.abstract.startcat);
+ }
+ }
+ }
+ return abstractTree;
+}
diff --git a/old-lib/javascript/gflib-xhtml-voice.js b/old-lib/javascript/gflib-xhtml-voice.js new file mode 100644 index 000000000..fd8660100 --- /dev/null +++ b/old-lib/javascript/gflib-xhtml-voice.js @@ -0,0 +1,54 @@ +/* Output */ + +function sayText(text) { + document.voice_output_text = text; + activateForm("voice_output"); +} + +/* XHTML+Voice Utilities */ + +function activateForm(formid) { + var form = document.getElementById(formid); + var e = document.createEvent("UIEvents"); + e.initEvent("DOMActivate","true","true"); + form.dispatchEvent(e); +} + + +/* DOM utilities */ + +/* Gets the head element of the document. */ +function getHeadElement() { + var hs = document.getElementsByTagName("head"); + if (hs.length == 0) { + var head = document.createElement("head"); + document.documentElement.insertBefore(head, document.documentElement.firstChild); + return head; + } else { + return hs[0]; + } +} + +/* Gets the body element of the document. */ +function getBodyElement() { + var bs = document.getElementsByTagName("body"); + if (bs.length == 0) { + var body = document.createElement("body"); + document.documentElement.appendChild(body); + return body; + } else { + return bs[0]; + } +} + +/* Removes all the children of a node */ +function removeChildren(node) { + while (node.hasChildNodes()) { + node.removeChild(node.firstChild); + } +} + +function setText(node, text) { + removeChildren(node); + node.appendChild(document.createTextNode(text)); +} diff --git a/old-lib/javascript/gflib.js b/old-lib/javascript/gflib.js new file mode 100644 index 000000000..728655469 --- /dev/null +++ b/old-lib/javascript/gflib.js @@ -0,0 +1,1128 @@ + +function GFGrammar(abstract, concretes) { + this.abstract = abstract; + this.concretes = concretes; +} + +/* Translates a string from any concrete syntax to all concrete syntaxes. + Uses the start category of the grammar. +*/ +GFGrammar.prototype.translate = function (input, fromLang, toLang) { + var outputs = new Object(); + var fromConcs = this.concretes; + if (fromLang) { + fromConcs = new Object(); + fromConcs[fromLang] = this.concretes[fromLang]; + } + var toConcs = this.concretes; + if (toLang) { + toConcs = new Object(); + toConcs[toLang] = this.concretes[toLang]; + } + for (var c1 in fromConcs) { + var p = this.concretes[c1].parser; + if (p) { + var trees = p.parseString(input, this.abstract.startcat); + if (trees.length > 0) { + outputs[c1] = new Array(); + for (var i in trees) { + outputs[c1][i] = new Object(); + for (var c2 in toConcs) { + outputs[c1][i][c2] = this.concretes[c2].linearize(trees[i]); + } + } + } + } + } + return outputs; +} + + +/* ------------------------------------------------------------------------- */ +/* ----------------------------- LINEARIZATION ----------------------------- */ +/* ------------------------------------------------------------------------- */ + +/* Extension to the String object */ + +String.prototype.tag = ""; +String.prototype.setTag = function (tag) { this.tag = tag; }; + +/* Abstract syntax trees */ +function Fun(name) { + this.name = name; + this.args = copy_arguments(arguments, 1); +} +Fun.prototype.print = function () { return this.show(0); } ; +Fun.prototype.show = function (prec) { + if (this.isMeta()) { + if (isUndefined(this.type)) { + return '?'; + } else { + var s = '?:' + this.type; + if (prec > 0) { + s = "(" + s + ")" ; + } + return s; + } + } else { + var s = this.name; + var cs = this.args; + for (var i in cs) { + s += " " + (isUndefined(cs[i]) ? "undefined" : cs[i].show(1)); + } + if (prec > 0 && cs.length > 0) { + s = "(" + s + ")" ; + } + return s; + } +}; +Fun.prototype.getArg = function (i) { + return this.args[i]; +}; +Fun.prototype.setArg = function (i,c) { + this.args[i] = c; +}; +Fun.prototype.isMeta = function() { + return this.name == '?'; +} ; +Fun.prototype.isComplete = function() { + if (this.isMeta()) { + return false; + } else { + for (var i in this.args) { + if (!this.args[i].isComplete()) { + return false; + } + } + return true; + } +} ; +Fun.prototype.isLiteral = function() { + return (/^[\"\d]/).test(this.name); +} ; + +/* Concrete syntax terms */ + +function Arr() { this.arr = copy_arguments(arguments, 0); } +Arr.prototype.tokens = function() { return this.arr[0].tokens(); }; +Arr.prototype.sel = function(i) { return this.arr[i.toIndex()]; }; +Arr.prototype.setTag = function(tag) { + for (var i = 0, j = this.arr.length; i < j; i++) { + this.arr[i].setTag(tag); + } +}; + +function Seq() { this.seq = copy_arguments(arguments, 0); } +Seq.prototype.tokens = function() { + var xs = new Array(); + for (var i in this.seq) { + var ys = this.seq[i].tokens(); + for (var j in ys) { + xs.push(ys[j]); + } + } + return xs; +}; +Seq.prototype.setTag = function(tag) { + for (var i = 0, j = this.seq.length; i < j; i++) { + this.seq[i].setTag(tag); + } +}; + +function Variants() { this.variants = copy_arguments(arguments, 0); } +Variants.prototype.tokens = function() { return this.variants[0].tokens(); }; +Variants.prototype.sel = function(i) { return this.variants[0].sel(i); }; +Variants.prototype.toIndex = function() { return this.variants[0].toIndex(); }; +Variants.prototype.setTag = function(tag) { + for (var i = 0, j = this.variants.length; i < j; i++) { + this.variants[i].setTag(tag); + } +}; + +function Rp(index,value) { this.index = index; this.value = value; } +Rp.prototype.tokens = function() { return new Array(this.index.tokens()); }; +Rp.prototype.sel = function(i) { return this.value.arr[i.toIndex()]; }; +Rp.prototype.toIndex = function() { return this.index.toIndex(); }; +Rp.prototype.setTag = function(tag) { this.index.setTag(tag) }; + +function Suffix(prefix,suffix) { + this.prefix = new String(prefix); + if (prefix.tag) { this.prefix.tag = prefix.tag; } + this.suffix = suffix; +}; +Suffix.prototype.tokens = function() { + var xs = this.suffix.tokens(); + for (var i in xs) { + xs[i] = new String(this.prefix + xs[i]); + xs[i].setTag(this.prefix.tag); + } + return xs; +}; +Suffix.prototype.sel = function(i) { return new Suffix(this.prefix, this.suffix.sel(i)); }; +Suffix.prototype.setTag = function(tag) { if (!this.prefix.tag) { this.prefix.setTag(tag); } }; + +function Meta() { } +Meta.prototype.tokens = function() { + var newString = new String("?"); + newString.setTag(this.tag); + return new Array(newString); +}; +Meta.prototype.toIndex = function() { return 0; }; +Meta.prototype.sel = function(i) { return this; }; +Meta.prototype.setTag = function(tag) { if (!this.tag) { this.tag = tag; } }; + +function Str(value) { this.value = value; } +Str.prototype.tokens = function() { + var newString = new String(this.value); + newString.setTag(this.tag); + return new Array(newString); +}; +Str.prototype.setTag = function(tag) { if (!this.tag) { this.tag = tag; } }; + +function Int(value) { this.value = value; } +Int.prototype.tokens = function() { + var newString = new String(this.value.toString()); + newString.setTag(this.tag); + return new Array(newString); +}; +Int.prototype.toIndex = function() { return this.value; }; +Int.prototype.setTag = function(tag) { if (!this.tag) { this.tag = tag; } }; + +/* Type annotation */ + +function GFAbstract(startcat, types) { + this.startcat = startcat; + this.types = types; +} +GFAbstract.prototype.addType = function(fun, args, cat) { + this.types[fun] = new Type(args, cat); +} ; +GFAbstract.prototype.getArgs = function(fun) { + return this.types[fun].args; +} +GFAbstract.prototype.getCat = function(fun) { + return this.types[fun].cat; +}; +GFAbstract.prototype.annotate = function(tree, type) { + if (tree.name == '?') { + tree.type = type; + } else { + var typ = this.types[tree.name]; + for (var i in tree.args) { + this.annotate(tree.args[i], typ.args[i]); + } + } + return tree; +} ; +GFAbstract.prototype.handleLiterals = function(tree, type) { + if (tree.name != '?') { + if (type == "String" || type == "Int" || type == "Float") { + tree.name = type + "_Literal_" + tree.name; + } else { + var typ = this.types[tree.name]; + for (var i in tree.args) { + this.handleLiterals(tree.args[i], typ.args[i]); + } + } + } + return tree; +} ; +/* Hack to get around the fact that our SISR doesn't build real Fun objects. */ +GFAbstract.prototype.copyTree = function(x) { + var t = new Fun(x.name); + if (!isUndefined(x.type)) { + t.type = x.type; + } + var cs = x.args; + if (!isUndefined(cs)) { + for (var i in cs) { + t.setArg(i, this.copyTree(cs[i])); + } + } + return t; +} ; +GFAbstract.prototype.parseTree = function(str, type) { + return this.annotate(this.parseTree_(str.match(/[\w\'\.\"]+|\(|\)|\?|\:/g), 0), type); +} ; +GFAbstract.prototype.parseTree_ = function(tokens, prec) { + if (tokens.length == 0 || tokens[0] == ")") { return null; } + var t = tokens.shift(); + if (t == "(") { + var tree = this.parseTree_(tokens, 0); + tokens.shift(); + return tree; + } else if (t == '?') { + var tree = this.parseTree_(tokens, 0); + return new Fun('?'); + } else { + var tree = new Fun(t); + if (prec == 0) { + var c, i; + for (i = 0; (c = this.parseTree_(tokens, 1)) !== null; i++) { + tree.setArg(i,c); + } + } + return tree; + } +} ; + +function Type(args, cat) { + this.args = args; + this.cat = cat; +} + +/* Linearization */ + +function GFConcrete(flags, rules, parser) { + this.flags = flags; + this.rules = rules; + if (parser) { + this.parser = parser; + } else { + this.parser = undefined; + } +} +GFConcrete.prototype.rule = function (name, cs) { + var r = this.rules[name]; + if (r) { + return this.rules[name](cs); + } else { + window.alert("Missing rule " + name); + } +}; +GFConcrete.prototype.addRule = function (name, f) { this.rules[name] = f; }; +GFConcrete.prototype.lindef = function (cat, v) { return this.rules[cat]([new Str(v)]); } ; +GFConcrete.prototype.linearize = function (tree) { + return this.unlex(this.linearizeToTerm(tree).tokens()); +}; +GFConcrete.prototype.linearizeToTerm = function (tree) { + if (tree.isMeta()) { + if (isUndefined(tree.type)) { + return new Meta(); + } else { + return this.lindef(tree.type, tree.name); + } + } else { + var cs = new Array(); + for (var i in tree.args) { + cs.push(this.linearizeToTerm(tree.args[i])); + } + if (tree.isLiteral()) { + return new Arr(new Str(tree.name)); + } else { + return this.rule(tree.name, cs); + } + } +}; +GFConcrete.prototype.unlex = function (ts) { + if (ts.length == 0) { + return ""; + } + + var noSpaceAfter = /^[\(\-\[]/; + var noSpaceBefore = /^[\.\,\?\!\)\:\;\-\]]/; + + var s = ""; + for (var i = 0; i < ts.length; i++) { + var t = ts[i]; + var after = i < ts.length-1 ? ts[i+1] : null; + s += t; + if (after != null && !t.match(noSpaceAfter) + && !after.match(noSpaceBefore)) { + s += " "; + } + } + return s; +}; +GFConcrete.prototype.tagAndLinearize = function (tree) { + return this.tagAndLinearizeToTerm(tree, "0").tokens(); +}; +GFConcrete.prototype.tagAndLinearizeToTerm = function (tree, route) { + if (tree.isMeta()) { + if (isUndefined(tree.type)) { + var newMeta = new Meta(); + newMeta.setTag(route); + return newMeta; + } else { + var newTerm = this.lindef(tree.type, tree.name); + newTerm.setTag(route); + return newTerm; + } + } else { + var cs = new Array(); + for (var i in tree.args) { + cs.push(this.tagAndLinearizeToTerm(tree.args[i], route + "-" + i)); + } + var newTerm = this.rule(tree.name, cs); + newTerm.setTag(route); + return newTerm; + } +}; + +/* Utilities */ + +/* from Remedial JavaScript by Douglas Crockford, http://javascript.crockford.com/remedial.html */ +function isString(a) { return typeof a == 'string'; } +function isArray(a) { return a && typeof a == 'object' && a.constructor == Array; } +function isUndefined(a) { return typeof a == 'undefined'; } +function isBoolean(a) { return typeof a == 'boolean'; } +function isNumber(a) { return typeof a == 'number' && isFinite(a); } +function isFunction(a) { return typeof a == 'function'; } + +function dumpObject (obj) { + if (isUndefined(obj)) { + return "undefined"; + } else if (isString(obj)) { + return '"' + obj.toString() + '"'; // FIXME: escape + } else if (isBoolean(obj) || isNumber(obj)) { + return obj.toString(); + } else if (isArray(obj)) { + var x = "["; + for (var i in obj) { + x += dumpObject(obj[i]); + if (i < obj.length-1) { + x += ","; + } + } + return x + "]"; + } else { + var x = "{"; + for (var y in obj) { + x += y + "=" + dumpObject(obj[y]) + ";" ; + } + return x + "}"; + } +} + + +function copy_arguments(args, start) { + var arr = new Array(); + for (var i = 0; i < args.length - start; i++) { + arr[i] = args[i + start]; + } + return arr; +} + +/* ------------------------------------------------------------------------- */ +/* -------------------------------- PARSING -------------------------------- */ +/* ------------------------------------------------------------------------- */ + + +function Parser(startcat, rules, cats) { + this.startcat = startcat; + this.rules = rules; + this.cats = cats; +} +Parser.prototype.showRules = function () { + var ruleStr = new Array(); + ruleStr.push(""); + for (i = 0, j = this.rules.length; i < j; i++) { + ruleStr.push(this.rules[i].show()); + } + return ruleStr.join(""); +}; +Parser.prototype.parseString = function (string, cat) { + var tokens = string.split(" "); + // remove empty tokens + for (var i = tokens.length - 1; i >= 0; i--) { + if (tokens[i] == "") { tokens.splice(i, 1); } + } + chart = new Chart(true); + predict(this.rules, tokens); + while (chart.updated) { + chart.updated = false; + completeAndConvert(); + scan(); + combine(); + } + var catToParse = this.startcat; + if (cat) { catToParse = cat; } + var goalRange = new Range(0, tokens.length); + if (tokens.length == 1 && tokens[0] == "") { goalRange = new EmptyRange(); } + var activeEdges = filterActiveEdges(); + var trees = new Array(); + for (var i = 0, j = this.cats[catToParse].length; i < j; i++) { + if (foundTarget(this.cats[catToParse][i], new Array(new Array(goalRange)))) { + trees = trees.concat(extractTrees(this.cats[catToParse][i], new Array(new Array(goalRange)), activeEdges, "")); + } + } + for (var i = trees.length - 1; i >= 0; i--) { + if (trees[i] == undefined) { trees.splice(i, 1); } + } + return trees; +}; + +// Rule Object Definition + +function Rule(cat, profile, args, linRec) { + this.cat = cat; + this.profile = profile; + this.args = args; + this.linRec = linRec; +} +Rule.prototype.show = function () { + var recStr = new Array(); + recStr.push(this.cat, " -> ", this.profile.show(), " [", this.args, "] = ", showLinRec(this.linRec, "")); + return recStr.join(""); +}; + +// Profile definitions + +// Function application +// The function (name) is applied to its arguments (args) +function FunApp(name, args) { + this.id = "FunApp"; + this.name = name; + this.args = args.slice(0); +} +FunApp.prototype.show = function () { + var funAppStr = new Array(); + funAppStr.push("(", this.name); + for (var i = 0, j = this.args.length; i < j; i++) { + funAppStr.push(this.args[i].show()); + } + funAppStr.push(")"); + return funAppStr.join(" "); +}; + +// Literal +function Lit(name) { + this.id = "Lit"; + this.name = name; +} +Lit.prototype.show = function () { return this.name; }; + +// Metavariable +function MetaVar() { this.id = "MetaVar"; } +MetaVar.prototype.show = function () { return "?"; }; + +// Argument +function Arg(i) { + this.id = "Arg"; + this.name = "_"; + this.i = i; +} +Arg.prototype.show = function () { + var argStr = new Array(); + argStr.push(this.id, "(", this.i, ")"); + return argStr.join(""); +}; + +// Unification +// The arguments (args) must be unified +function Unify(args){ + this.id = "Unify"; + this.args = args.slice(0); +} +Unify.prototype.show = function () { + var unifyStr = new Array(); + unifyStr.push("(", this.id); + for (var i = 0, j = this.args.length; i < j; i++) { + unifyStr.push(this.args[i].show()); + } + unifyStr.push(")"); + return unifyStr.join(" "); +}; + +// Definition of symbols present in linearization records + +// Object to represent argument projections in grammar rules +function ArgProj(i, label) { + this.id = "argProj"; + this.i = i; + this.label = label; +} +ArgProj.prototype.getId = function () { return this.id; }; +ArgProj.prototype.getArgNum = function () { return this.i }; +ArgProj.prototype.show = function () { + var argStr = new Array(); + argStr.push(this.i, this.label); + return argStr.join("."); +}; +ArgProj.prototype.isEqual = function (obj) { + return (this.id == obj.id && this.i == obj.i && this.label == obj.label); +} + +// Object to represent terminals in grammar rules +function Terminal (str) { + this.id = "terminal"; + this.str = str; +} +Terminal.prototype.getId = function () { return this.id; }; +Terminal.prototype.show = function () { + var terminalStr = new Array(); + terminalStr.push('"', this.str, '"'); + return terminalStr.join(""); +}; +Terminal.prototype.isEqual = function (obj) { + return (this.id == obj.id && this.str == obj.str); +} + +// Object to represent ranges in grammar rules +function Range (i, j) { + this.id = "range"; + this.i = i; + this.j = j; +} +Range.prototype.getId = function () { return this.id; }; +Range.prototype.show = function () { + var terminalStr = new Array(); + terminalStr.push("(", this.i, ",", this.j, ")"); + return terminalStr.join(""); +}; +Range.prototype.isEqual = function (obj) { + return (this.id == obj.id && this.i == obj.i && this.j == obj.j); +} + +// Object to represent the empty range in grammar rules +function EmptyRange () { + this.id = "emptyRange"; +} +EmptyRange.prototype.getId = function () { return this.id; }; +EmptyRange.prototype.show = function () { return "emptyRange" }; +EmptyRange.prototype.isEqual = function (obj) { + return (this.id == obj.id); +} + +// Chart Object Definition +function Chart(updated) { + this.passive = new Array(); + this.active = new Array(); + this.updated = updated; +} +Chart.prototype.show = function () { + var chartStr = new Array(); + chartStr.push("(", this.showPassive(), ", ", this.showActive(), ")"); + return chartStr.join(""); +}; +Chart.prototype.addPassiveEdge = function (cat, linRec) { + if (!this.passive[cat] || !this.passive[cat].length) { + this.passive[cat] = new Array(); + } + this.passive[cat].push(linRec); +}; +Chart.prototype.isPassiveElem = function (cat, linRec) { + if (this.passive[cat]) { + for (var i = 0, j = this.passive[cat].length; i < j; i++) { + if (linRecsAreEqual(this.passive[cat][i], linRec)) { + return true; + } + } + } + return false; +}; +Chart.prototype.showPassive = function () { + var edgesStr = new Array(); + edgesStr.push("[ "); + for (var cat in this.passive) { + for (var i = 0, j = this.passive[cat].length; i < j; i++) { + edgesStr.push("( ", cat, ", ", showLinRec(this.passive[cat][i], ""), ")"); + if (i != j - 1) { edgesStr.push(", "); }; + } + edgesStr.push(", "); + } + edgesStr.push(" ]"); + return edgesStr.join(""); + return edgesStr.join("") + "<br />"; +}; +Chart.prototype.addActiveEdge = function (cat, edge) { + if (!this.active[cat] || !this.active[cat].length) { + this.active[cat] = new Array(); + } + this.active[cat].push(edge); +}; +Chart.prototype.isActiveElem = function (cat, edge) { + if (this.active[cat]) { + for (var i = 0, j = this.active[cat].length; i < j; i++) { + var currentEdge = this.active[cat][i]; + if (currentEdge.name == edge.name && (areArgsEqual(currentEdge.args, edge.args)) && + currentEdge.currLabel == edge.currLabel && currentEdge.currLin.isEqual(edge.currLin) && + linRecsAreEqual(currentEdge.linFound, edge.linFound) && linRowsAreEqual(currentEdge.remLin, edge.remLin) && + linRecsAreEqual(currentEdge.remLinRows, edge.remLinRows) && + arraysOfLinRecsAreEqual(currentEdge.children, edge.children)) { + return true; + } + } + } + return false; +}; +Chart.prototype.showActive = function () { + var edgesStr = new Array() + edgesStr.push("[ "); + for (var cat in this.active) { + for (var i = 0, j = this.active[cat].length; i < j; i++) { + edgesStr.push("( ", this.active[cat][i].show(), " )"); + if (i != j - 1) { edgesStr.push(", "); }; + } + edgesStr.push(", "); + } + edgesStr.push(" ]"); + return edgesStr.join(""); +}; + +// Object to represent the active edges in a chart +function ActiveEdge(profile, cat, name, args, linFound, currLabel, currLin, remLin, remLinRows, children) { + this.profile = profile; + this.cat = cat; + this.name = name; + this.args = args; + this.linFound = linFound; + this.currLabel = currLabel; + this.currLin = currLin; + this.remLin = remLin; + this.remLinRows = remLinRows; + this.children = children.slice(0); +} +ActiveEdge.prototype.show = function () { + var linRecStr = new Array(); + linRecStr.push(this.profile.show(), ", ", this.cat, ", ", this.name, ", [ ", this.args, " ], ", showLinRec(this.linFound, ""), + ", ", this.currLabel, ", ", this.currLin.show(), ", ", showLinRow(this.remLin, " ++ "), + ", ", showLinRec(this.remLinRows, ""), ", [ "); + for (var i = 0, j = this.children.length; i < j; i++) { + linRecStr.push(showLinRec(this.children[i], "")); + if (i != j - 1) { linRecStr.push(", "); }; + } + linRecStr.push(" ]"); + return linRecStr.join(""); +}; + +function areArgsEqual(args1, args2) { + if (args1.length == args1.length && args1.join() == args2.join()) { + return true + } + return false; +} + +// Functions to manipulate linearization records + +// Returns a string representation of a linearization row +function showLinRow(linRow, separator) { + var linRowStr = new Array(); + linRowStr.push(" [ "); + for (var i = 0, j = linRow.length; i < j; i ++) { + linRowStr.push(linRow[i].show()); + if (i != j - 1) { linRowStr.push(separator) }; + } + linRowStr.push(" ] "); + return linRowStr.join(""); +} + +// Returns a string representation of a linearization record +function showLinRec(linRec, separator) { + var linRecStr = new Array(); + linRecStr.push(" [ "); + for (var i = 0, j = linRec.length; i < j; i ++) { + linRecStr.push(showLinRow(linRec[i], " ++ ")); + if (i != j - 1) { linRecStr.push(separator); }; + } + linRecStr.push(" ] "); + return linRecStr.join(""); +} + +// Checks if two linearization rows are equal +function linRowsAreEqual(linRow1, linRow2) { + if (linRow1.length == linRow2.length) { + for (var i = 0, j = linRow1.length; i < j; i++) { + if (linRow1[i].id && linRow2[i].id && !linRow1[i].isEqual(linRow2[i])) { + return false; + } + } + return true; + } + return false; +} + +// Checks if two linearization records are equal +function linRecsAreEqual(linRec1, linRec2) { + if (linRec1.length == linRec2.length) { + for (var i = 0, j = linRec1.length; i < j; i++) { + if (!linRowsAreEqual(linRec1[i], linRec2[i])) { return false; } + } + return true; + } + return false; +} + +// Checks if two arrays of linearization records are equal +function arraysOfLinRecsAreEqual(array1, array2) { + if (array1.length == array2.length) { + for (var i = 0, j = array1.length; i < j; i++) { + if (!linRecsAreEqual(array1[i], array2[i])) { return false; } + } + return true; + } + return false; +} + +// Functions to manipulate ranges (restriction and concatenation) + +// Concatenates two ranges +function rangeConcatLin (lin1, lin2) { + if (lin1.id == "range" && lin2.id == "range") { + if (lin1.j == lin2.i) { return (new Range(lin1.i, lin2.j)) } + } else if (lin1.id == "range" && lin2.id == "emptyRange") { return lin1; } + else if (lin1.id == "emptyRange" && lin2.id == "range") { return lin2; } + else if (lin1.id == "emptyRange" && lin2.id == "emptyRange") { return lin1; } + return undefined; +} + +// Performs range concatenation on a linearization row +function rangeConcatLins (lins) { + var newLins = new Array(); + newLins.push(lins.shift()); + while (lins.length > 0) { + if (!newLins[newLins.length - 1]) { return new Array(); } + if (newLins[newLins.length - 1].id == "range" && lins[0].id == "range") { + var rangeConcat = rangeConcatLin(newLins.pop(), lins[0]); + if (typeof rangeConcat == 'undefined') { return new Array(); } + newLins.push(rangeConcat); + lins.shift(); + } else { + newLins.push(lins.shift()); + } + } + return newLins; +} + +// Performs range restriction on an element of a linearization row +// while keeping track of the tokens that have been used +function rangeRestLinTerm(tokens, lin, rangesNotConsumed) { + if (lin.id == "argProj") { return new Array(lin); } + else if (lin.id == "terminal") { + var ranges = new Array(); + for (var i = 0, j = tokens.length; i < j; i++) { + if (tokens[i] == lin.str) { + ranges.push(new Range(i, i + 1)); + rangesNotConsumed[i] = undefined; + } + } + if (ranges.length == 0) { + return undefined; + } else { + return ranges; + } + } + else { return new Array(); } +} + +// Performs range restriction on a linearization record +// while keeping track of the tokens that have been used +function rangeRestRecTerm(linRec, tokens, rangesNotConsumed) { + var ranges = new Array(); + for (var i = 0, j = linRec.length; i < j; i++) { + var rangeRestLins = new Array(); + for (var k = 0, l = linRec[i].length; k < l; k++) { + rangeRestLins.push(rangeRestLinTerm(tokens, linRec[i][k], rangesNotConsumed)); + } + var combinedLins = combineLins(rangeRestLins); + if (typeof combinedLins != 'undefined') { + var filteredLins = new Array(); + if (combinedLins.length == 0) { + filteredLins.push(new Array()); + } else { + for (var m = 0, n = combinedLins.length; m < n; m++) { + var temp = rangeConcatLins(combinedLins[m]); + if (temp.length != 0) { + filteredLins.push(temp); + } + } + } + ranges.push(filteredLins); + } else { ranges.push(undefined); } + } + for (var k = 0, l = ranges.length; k < l; k++) { + if (ranges[k] == undefined) { return undefined; } + } + return combineLins(ranges); +} + +// Returns the combinations of the elements of an array of arrays +function combineLins(linss) { + if (linss.length > 0) { + var combinedLins = new Array(); + var lins = linss.shift(); + if (lins) { + if (lins.length != 0) { + var tail = combineLins(linss); + if (typeof tail == 'undefined') { return undefined; } + for (var i = 0, j = lins.length; i < j; i++) { + var head = new Array(); + head.push(lins[i]); + if (tail.length == 0) { combinedLins.push(head); } + else { + for (var k = 0, l = tail.length; k < l; k++) { + combinedLins.push(head.concat(tail[k])); + } + } + } + } else { return new Array(); } + } else { return undefined; } + return combinedLins; + } else { return new Array(); } +} + +// Inference Rules + +function predict(rules, tokens) { + var rangesNotConsumed = genRanges(tokens.length); + for (var i = 0, j = rules.length; i < j; i++) { + var currentRule = rules[i]; + var linRec = rangeRestRecTerm(currentRule.linRec, tokens, rangesNotConsumed); + if (linRec) { + for (var k = 0, l = linRec.length; k < l; k++) { + var currentRow = linRec[k].shift(); + var remlinRows = linRec[k]; + var children = new Array(); + for (var m = 0, n = currentRule.args.length; m < n; m++) { + children.push(new Array()); + } + var newActive = new ActiveEdge(currentRule.profile, currentRule.cat, currentRule.profile.name, currentRule.args, new Array(), 0, new EmptyRange(), currentRow, remlinRows, children); + if (!chart.isActiveElem(currentRule.cat, newActive)) { + chart.addActiveEdge(currentRule.cat, newActive); + chart.updated = true; + } + } + } + } + for (var i = 0, j = rangesNotConsumed.length; i < j; i++) { + if (rangesNotConsumed[i] != undefined) { + var cat = undefined; + if (isNaN(tokens[i])) { + cat = "-1"; + } else if (tokens[i].lastIndexOf(".") == -1) { + cat = "-2"; + } else { + cat = "-3"; + } + var lit = undefined; + if (cat == "-1") { + lit = "\"" + tokens[i] + "\""; + } else { + lit = tokens[i]; + } + var newActive = new ActiveEdge(new Lit(lit), cat, tokens[i], new Array(), new Array(), 0, new Range(i, i + 1), new Array(), new Array(), new Array()); + if (!chart.isActiveElem(cat, newActive)) { + chart.addActiveEdge(cat, newActive); + chart.updated = true; + } + } + } +} + +function genRanges(inputLength) { + var ranges = new Array(); + for (var i = 0; i < inputLength; i++) { + ranges.push(i); + } + return ranges; +} + +function completeAndConvert() { + for (var cat in chart.active) { + var currentEdge = chart.active[cat]; + for (var i = 0, j = currentEdge.length; i < j; i++) { + if (currentEdge[i].remLin.length == 0) { + if (currentEdge[i].remLinRows.length == 0) { + var linFound = currentEdge[i].linFound.slice(0); + linFound.push(new Array(currentEdge[i].currLin)); + if (!chart.isPassiveElem(cat, linFound)) { + chart.addPassiveEdge(cat, linFound); + chart.updated = true; + } + } else { + var linFound = currentEdge[i].linFound.slice(0); + linFound.push(new Array(currentEdge[i].currLin)); + var remLinRows = currentEdge[i].remLinRows.slice(0); + var currentRow = remLinRows.shift(); + var newActive = new ActiveEdge(currentEdge[i].profile, cat, currentEdge[i].name, currentEdge[i].args, linFound, linFound.length, new EmptyRange(), currentRow, remLinRows, currentEdge[i].children); + if (!chart.isActiveElem(cat, newActive)) { + chart.active[cat].push(newActive); + chart.updated = true; + } + } + } + } + } +} + +function scan() { + for (var cat in chart.active) { + var currentEdge = chart.active[cat]; + for (var i = 0, j = currentEdge.length; i < j; i++) { + if (currentEdge[i].remLin.length > 0 && currentEdge[i].remLin[0].id == "range") { + var newRange = rangeConcatLin(currentEdge[i].currLin, currentEdge[i].remLin[0]); + if (typeof newRange != 'undefined') { + var remLin = currentEdge[i].remLin.slice(0); + remLin.shift(); + var newActive = new ActiveEdge(currentEdge[i].profile, cat, currentEdge[i].name, currentEdge[i].args, currentEdge[i].linFound, currentEdge[i].currLabel, newRange, remLin, currentEdge[i].remLinRows, currentEdge[i].children); + if (!chart.isActiveElem(cat, newActive)) { + chart.active[cat].push(newActive); + chart.updated = true; + } + } + } + } + } +} + +function combine() { + for (var cat in chart.active) { + for (var i = 0; i < chart.active[cat].length; i++) { + var currentEdge = chart.active[cat][i]; + if (currentEdge.remLin.length && currentEdge.remLin[0].id == "argProj") { + var argNumber = currentEdge.remLin[0].i; + var catToCombine = currentEdge.args[argNumber]; + if (chart.passive[catToCombine]) { + for (var k = 0, l = chart.passive[catToCombine].length; k < l; k++) { + var currentPassive = chart.passive[catToCombine][k]; + var remLin = currentEdge.remLin.slice(0); + var linRow = currentPassive[remLin[0].label]; + if (typeof linRow != 'undefined') { + var newLinRow = linRow.slice(0); + if (currentEdge.children[argNumber].length == 0) { + var newRange = rangeConcatLin(currentEdge.currLin, newLinRow.shift()); + if (typeof newRange != 'undefined') { + remLin.shift(); + var children = currentEdge.children.slice(0); + children[argNumber] = currentPassive.slice(0); + var newActive = new ActiveEdge(currentEdge.profile, currentEdge.cat, currentEdge.name, currentEdge.args, currentEdge.linFound, currentEdge.currLabel, newRange, remLin, currentEdge.remLinRows, children); + if (!chart.isActiveElem(cat, newActive)) { + chart.active[cat].push(newActive); + chart.updated = true; + } + } + } else { + var child = currentEdge.children[argNumber]; + if (linRecsAreEqual(currentPassive, child)) { + var newRange = rangeConcatLin(currentEdge.currLin, newLinRow.shift()); + if (typeof newRange != 'undefined') { + remLin.shift(); + var children = currentEdge.children.slice(0); + children[argNumber] = currentPassive.slice(0); + var newActive = new ActiveEdge(currentEdge.profile, currentEdge.cat, currentEdge.name, currentEdge.args, currentEdge.linFound, currentEdge.currLabel, newRange, remLin, currentEdge.remLinRows, children); + if (!chart.isActiveElem(cat, newActive)) { + chart.active[cat].push(newActive); + chart.updated = true; + } + } + } + } + } + } + } + } + } + } +} + +// Checks if the parsing goal is in the chart +function foundTarget(cat, linRec) { + if (chart.passive[cat]) { + for (var i = 0, j = chart.passive[cat].length; i < j; i++) { + if (linRecsAreEqual(linRec, chart.passive[cat][i])) { + return true; + } + } + } + return false; +} + +// Filters the active edges that are relevant for tree extraction +function filterActiveEdges() { + var activeEdges = new Array(); + for (var cat in chart.active) { + activeEdges[cat] = new Array(); + for (var i = 0, j = chart.active[cat].length; i < j; i++) { + var currentEdge = chart.active[cat][i]; + if (currentEdge.remLin.length == 0 && currentEdge.remLinRows.length == 0) { + var linFound = currentEdge.linFound.slice(0); + linFound.push(new Array(currentEdge.currLin)); + var newActive = new ActiveEdge(currentEdge.profile, currentEdge.cat, currentEdge.name, currentEdge.args, linFound, "", "", "", "", currentEdge.children); + activeEdges[cat].push(newActive); + } + } + } + return activeEdges; +} + +// Extracts the parse trees from the chart +function extractTrees(cat, linRec, activeEdges, currentTree) { + var trees = new Array(); + for (var i = 0, j = activeEdges[cat].length; i < j; i++) { + var currentEdge = activeEdges[cat][i]; + var currentNode = "(" + cat + "-" + i + ")"; + if (currentTree.indexOf(currentNode) == -1 && cat == currentEdge.cat && linRecsAreEqual(linRec, currentEdge.linFound)) { + var subTrees = new Array(); + for (var k = 0, l = currentEdge.children.length; k < l; k++) { + subTrees.push(extractTrees(currentEdge.args[k], currentEdge.children[k].slice(0), activeEdges, currentTree + currentNode)); + } + var combinedSubTrees = combineLins(subTrees); + if (combinedSubTrees) { + if (currentEdge.children.length == 0) { combinedSubTrees.push(new Array()); } + for (var m = 0, n = combinedSubTrees.length; m < n; m++) { + var tree = buildTree(currentEdge.profile, combinedSubTrees[m]); + if (tree) { + trees.push(tree); + } + } + } + } + } + if (trees.length == 0) { + return undefined; + } else { + return trees; + } +} + +// Builds a tree according to the profile +function buildTree(profile, args) { + switch(profile.id) + { + case "FunApp": + var tree = new Fun(profile.name); + for (var i = 0, j = profile.args.length; i < j; i++) { + var subTree = buildTree(profile.args[i], args); + if (subTree) { + tree.setArg(i, subTree); + } else { + return undefined; + } + } + return tree; + case "Lit": + return new Fun(profile.name); + case "MetaVar": + return new Fun("?"); + case "Arg": + return args[profile.i]; + case "Unify": + var subTrees = new Array(); + for (var i = 0, j = profile.args.length; i < j; i++) { + subTrees.push(buildTree(profile.args[i], args)) + } + return unifySubTrees(subTrees); + } +} + +// Tree unification functions +function unifySubTrees(subTrees) { + var t = subTrees[0]; + for (var i = 1, j = subTrees.length; i < j; i++) { + t = unify(t, subTrees[i]); + if (!t) { return undefined; } + } + return t; +} + +function unify(a, b) { + if (a.isMeta()) { return b }; + if (b.isMeta()) { return a }; + if (a.name == b.name && a.args.length == b.args.length) { + for (var i = 0, j = a.args.length; i < j; i++) { + if (!unify(a.args[i], b.args[i])) { return undefined; } + } + return a + }; + return undefined; +} diff --git a/old-lib/javascript/grammar.js b/old-lib/javascript/grammar.js new file mode 100644 index 000000000..69175bba4 --- /dev/null +++ b/old-lib/javascript/grammar.js @@ -0,0 +1 @@ +var Food = new GFGrammar(new GFAbstract("Phrase",{Boring: new Type([], "Quality"), Cheese: new Type([], "Kind"), Delicious: new Type([], "Quality"), Expensive: new Type([], "Quality"), Fish: new Type([], "Kind"), Fresh: new Type([], "Quality"), Is: new Type(["Item", "Quality"], "Phrase"), Italian: new Type([], "Quality"), QKind: new Type(["Quality", "Kind"], "Kind"), That: new Type(["Kind"], "Item"), This: new Type(["Kind"], "Item"), Very: new Type(["Quality"], "Quality"), Warm: new Type([], "Quality"), Wine: new Type([], "Kind")}),{FoodEng: new GFConcrete({},{Boring: function(cs){return new Arr(new Str("boring"));}, Cheese: function(cs){return new Arr(new Str("cheese"));}, Delicious: function(cs){return new Arr(new Str("delicious"));}, Expensive: function(cs){return new Arr(new Str("expensive"));}, Fish: function(cs){return new Arr(new Str("fish"));}, Fresh: function(cs){return new Arr(new Str("fresh"));}, Is: function(cs){return new Arr(new Seq(cs[0].sel(new Int(0)), new Str("is"), cs[1].sel(new Int(0))));}, Italian: function(cs){return new Arr(new Str("Italian"));}, QKind: function(cs){return new Arr(new Seq(cs[0].sel(new Int(0)), cs[1].sel(new Int(0))));}, That: function(cs){return new Arr(new Seq(new Str("that"), cs[0].sel(new Int(0))));}, This: function(cs){return new Arr(new Seq(new Str("this"), cs[0].sel(new Int(0))));}, Very: function(cs){return new Arr(new Seq(new Str("very"), cs[0].sel(new Int(0))));}, Warm: function(cs){return new Arr(new Str("warm"));}, Wine: function(cs){return new Arr(new Str("wine"));}, Item: function(cs){return new Arr(cs[0]);}, Kind: function(cs){return new Arr(cs[0]);}, Phrase: function(cs){return new Arr(cs[0]);}, Quality: function(cs){return new Arr(cs[0]);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}, new Parser("Phrase",[new Rule(1, new FunApp("Boring",[]),[],[[new Terminal("boring")]]), new Rule(1, new FunApp("Delicious",[]),[],[[new Terminal("delicious")]]), new Rule(1, new FunApp("Expensive",[]),[],[[new Terminal("expensive")]]), new Rule(1, new FunApp("Fresh",[]),[],[[new Terminal("fresh")]]), new Rule(1, new FunApp("Italian",[]),[],[[new Terminal("Italian")]]), new Rule(1, new FunApp("Very",[new Arg(0)]),[1],[[new Terminal("very"), new ArgProj(0, 0)]]), new Rule(1, new FunApp("Warm",[]),[],[[new Terminal("warm")]]), new Rule(2, new FunApp("Cheese",[]),[],[[new Terminal("cheese")]]), new Rule(2, new FunApp("Fish",[]),[],[[new Terminal("fish")]]), new Rule(2, new FunApp("QKind",[new Arg(0), new Arg(1)]),[1, 2],[[new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(2, new FunApp("Wine",[]),[],[[new Terminal("wine")]]), new Rule(3, new FunApp("Is",[new Arg(0), new Arg(1)]),[4, 1],[[new ArgProj(0, 0), new Terminal("is"), new ArgProj(1, 0)]]), new Rule(4, new FunApp("That",[new Arg(0)]),[2],[[new Terminal("that"), new ArgProj(0, 0)]]), new Rule(4, new FunApp("This",[new Arg(0)]),[2],[[new Terminal("this"), new ArgProj(0, 0)]])],{Float:[-3], Int:[-2], Item:[4], Kind:[2], Phrase:[3], Quality:[1], String:[-1], _Var:[-4]})), FoodIta: new GFConcrete({},{Boring: function(cs){return new Arr(new Str("noioso"));}, Cheese: function(cs){return new Arr(new Str("formaggio"));}, Delicious: function(cs){return new Arr(new Str("delizioso"));}, Expensive: function(cs){return new Arr(new Str("caro"));}, Fish: function(cs){return new Arr(new Str("pesce"));}, Fresh: function(cs){return new Arr(new Str("fresco"));}, Is: function(cs){return new Arr(new Seq(cs[0].sel(new Int(0)), new Str("è"), cs[1].sel(new Int(0))));}, Italian: function(cs){return new Arr(new Str("italiano"));}, QKind: function(cs){return new Arr(new Seq(cs[1].sel(new Int(0)), cs[0].sel(new Int(0))));}, That: function(cs){return new Arr(new Seq(new Str("quel"), cs[0].sel(new Int(0))));}, This: function(cs){return new Arr(new Seq(new Str("questo"), cs[0].sel(new Int(0))));}, Very: function(cs){return new Arr(new Seq(new Str("molto"), cs[0].sel(new Int(0))));}, Warm: function(cs){return new Arr(new Str("caldo"));}, Wine: function(cs){return new Arr(new Str("vino"));}, Item: function(cs){return new Arr(cs[0]);}, Kind: function(cs){return new Arr(cs[0]);}, Phrase: function(cs){return new Arr(cs[0]);}, Quality: function(cs){return new Arr(cs[0]);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}, new Parser("Phrase",[new Rule(1, new FunApp("Boring",[]),[],[[new Terminal("noioso")]]), new Rule(1, new FunApp("Delicious",[]),[],[[new Terminal("delizioso")]]), new Rule(1, new FunApp("Expensive",[]),[],[[new Terminal("caro")]]), new Rule(1, new FunApp("Fresh",[]),[],[[new Terminal("fresco")]]), new Rule(1, new FunApp("Italian",[]),[],[[new Terminal("italiano")]]), new Rule(1, new FunApp("Very",[new Arg(0)]),[1],[[new Terminal("molto"), new ArgProj(0, 0)]]), new Rule(1, new FunApp("Warm",[]),[],[[new Terminal("caldo")]]), new Rule(2, new FunApp("Cheese",[]),[],[[new Terminal("formaggio")]]), new Rule(2, new FunApp("Fish",[]),[],[[new Terminal("pesce")]]), new Rule(2, new FunApp("QKind",[new Arg(0), new Arg(1)]),[1, 2],[[new ArgProj(1, 0), new ArgProj(0, 0)]]), new Rule(2, new FunApp("Wine",[]),[],[[new Terminal("vino")]]), new Rule(3, new FunApp("Is",[new Arg(0), new Arg(1)]),[4, 1],[[new ArgProj(0, 0), new Terminal("è"), new ArgProj(1, 0)]]), new Rule(4, new FunApp("That",[new Arg(0)]),[2],[[new Terminal("quel"), new ArgProj(0, 0)]]), new Rule(4, new FunApp("This",[new Arg(0)]),[2],[[new Terminal("questo"), new ArgProj(0, 0)]])],{Float:[-3], Int:[-2], Item:[4], Kind:[2], Phrase:[3], Quality:[1], String:[-1], _Var:[-4]}))}); diff --git a/old-lib/javascript/minus.png b/old-lib/javascript/minus.png Binary files differnew file mode 100644 index 000000000..84cc2a9ba --- /dev/null +++ b/old-lib/javascript/minus.png diff --git a/old-lib/javascript/plus.png b/old-lib/javascript/plus.png Binary files differnew file mode 100644 index 000000000..4d2e8ee83 --- /dev/null +++ b/old-lib/javascript/plus.png diff --git a/old-lib/javascript/style.css b/old-lib/javascript/style.css new file mode 100644 index 000000000..962c3701f --- /dev/null +++ b/old-lib/javascript/style.css @@ -0,0 +1,241 @@ +body {
+ font-family:arial,helvetica,sans-serif;
+ font-size:12px;
+ background-color: white;
+}
+
+#wrapper {
+ width:740px;
+ height:520px;
+ margin:auto 50px;
+ border:1px solid gray;
+ padding:10px;
+
+}
+
+#absFrame {
+ width:250px;
+ height:250px;
+ padding:10px;
+ border:1px solid gray;
+ float:left;
+ white-space: nowrap;
+}
+
+#conFrame {
+ width:436px;
+ height:250px;
+ margin-left:10px;
+ padding:10px;
+ border:1px solid gray;
+ float:left;
+ white-space: normal;
+ overflow:auto;
+}
+
+#actFrame {
+ width:250px;
+ height:170px;
+ margin-top:10px;
+ padding:10px;
+ border:1px solid gray;
+ float:left;
+ overflow:auto;
+}
+
+#refFrame {
+ width:436px;
+ height:170px;
+ margin-left:10px;
+ margin-top:10px;
+ padding:10px;
+ border:1px solid gray;
+ float:left;
+ overflow:auto;
+}
+
+#messageFrame {
+ width:506px;
+ height:15px;
+ margin-top:10px;
+ margin-right:10px;
+ padding:10px;
+ border:1px solid gray;
+ float:left;
+ overflow:hidden;
+}
+
+#clipboardFrame {
+ width:180px;
+ height:15px;
+ margin-top:10px;
+ padding:10px;
+ border:1px solid gray;
+ float:left;
+ overflow:auto;
+}
+
+#tree {
+ left: -10px;
+ top: -10px;
+ width: 250px;
+ height: 250px;
+ margin: 0px;
+ padding: 10px;
+ overflow: auto;
+}
+
+ul {
+ position: relative;
+ list-style: none;
+ margin-left: 20px;
+ padding: 0px;
+}
+
+li {
+ position: relative;
+}
+
+img.tree-menu {
+ margin-right: 5px;
+}
+
+a.tree:link, a.tree:visited, a.tree:active {
+ color: black;
+ background-color: white;
+ text-decoration: none;
+ margin-right:10px;
+}
+
+a.tree:hover {
+ color: blue;
+ background-color: white;
+ text-decoration: underline;
+ margin-right:10px;
+}
+
+a.treeSelected:link, a.treeSelected:visited, a.treeSelected:active {
+ color: white;
+ background-color: #3366CC;
+ text-decoration: none;
+ margin-right:10px;
+}
+
+a.treeSelected:hover {
+ color: white;
+ background-color: #3366CC;
+ text-decoration: underline;
+ margin-right:10px;
+}
+
+a.treeGray:link, a.treeGray:visited, a.treeGray:active {
+ color: silver;
+ background-color: white;
+ text-decoration: none;
+ margin-right:10px;
+}
+
+a.treeGray:hover {
+ color: silver;
+ background-color: white;
+ text-decoration: none;
+ margin-right:10px;
+}
+
+table.action, table.refinement, table.wrapper, table.tree, table.language {
+ margin: 0px;
+ padding: 0px;
+ border-style: none;
+ border-collapse: collapse;
+ border-spacing: 0px;
+}
+
+tr.selected {
+ color: white;
+ background-color: #3366CC;
+}
+
+tr.unavailable, tr.closed {
+ color: silver;
+ background-color: white;
+}
+
+tr.unavailable:hover {
+ color: silver;
+ background-color: #3366CC;
+}
+
+tr.action, tr.refinement, tr.wrapper, tr.tree {
+ color: black;
+ background-color: white;
+}
+
+tr.action:hover, tr.refinement:hover, tr.wrapper:hover, tr.tree:hover {
+ color: white;
+ background-color: #3366CC;
+}
+
+td.action {
+ width: 220px;
+ margin: 0px;
+ padding: 0px;
+}
+
+td.refinement, td.wrapper, td.tree {
+ width: 515px;
+ margin: 0px;
+ padding: 0px;
+}
+
+td.hotKey {
+ width: 30px;
+ margin: 0px;
+ padding: 0px;
+ text-align: right;
+}
+
+td.language {
+ color: black;
+ background-color: white;
+ margin: 1px;
+ padding: 1px;
+}
+
+td.language:hover {
+ color: blue;
+ background-color: white;
+ text-decoration: underline;
+ margin: 1px;
+ padding: 1px;
+}
+
+td.selected {
+ color: white;
+ background-color: #3366CC;
+ margin: 1px;
+ padding: 1px;
+}
+
+td.selected:hover {
+ color: white;
+ background-color: #3366CC;
+ text-decoration: underline;
+ margin: 1px;
+ padding: 1px;
+}
+
+p {
+ margin-bottom: 40px;
+}
+
+span.normal {
+ color: black;
+ background-color: white;
+ text-decoration: none;
+}
+
+span.selected {
+ color: white;
+ background-color: #3366CC;
+ text-decoration: none;
+}
diff --git a/old-lib/javascript/translator.css b/old-lib/javascript/translator.css new file mode 100644 index 000000000..f7f771927 --- /dev/null +++ b/old-lib/javascript/translator.css @@ -0,0 +1,54 @@ +body { + color: black; + background-color: white; +} + +dl { + +} + +dt { + margin: 0; + padding: 0; +} + +dl dd { + margin: 0; + padding: 0; +} + +dl.fromLang dt { + display: none; +} + +dl.toLang { + border-width: 1px 0 0 0; + border-style: solid; + border-color: #c0c0c0; +} + +dl.toLang dt { + color: #c0c0c0; + display: block; + float: left; + width: 5em; +} + + +dl.toLang dd { + border-width: 0 0 1px 0; + border-style: solid; + border-color: #c0c0c0; +} + + +ul { + margin: 0; + padding: 0; +} + +li { + list-style-type: none; + margin: 0; + padding: 0; +}
\ No newline at end of file diff --git a/old-lib/javascript/translator.html b/old-lib/javascript/translator.html new file mode 100644 index 000000000..b6fd37086 --- /dev/null +++ b/old-lib/javascript/translator.html @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <link rel="stylesheet" type="text/css" href="translator.css" /> + <script type="text/javascript" src="gflib.js"></script> + <script type="text/javascript" src="grammar.js"></script> + <script type="text/javascript" src="translator.js"></script> + <script type="text/javascript"> + /* CHANGE ME */ + var grammar = Food; + + function updateTranslation () { + var input = document.getElementById('inputText').value; + var fromLang = document.getElementById('fromLang').value; + var toLang = document.getElementById('toLang').value; + var output = document.getElementById('output'); + var translation = grammar.translate(input, fromLang, toLang); + removeChildren(output); + output.appendChild(formatTranslation(translation)); + } + + function populateLangs () { + var f = document.getElementById('fromLang'); + var t = document.getElementById('toLang'); + for (var c in grammar.concretes) { + addOption(f, c, c); + addOption(t, c, c); + } + } + </script> + <title>Web-based GF Translator</title> + </head> + <body onload="populateLangs(Food, 'fromLang', 'toLang')"> + <form id="translate"> + <p> + <input type="text" name="inputText" id="inputText" value="this cheese is warm" size="50" /> + </p> + <p> + From: <select name="fromLang" id="fromLang" onchange=""><option value="">Any language</option></select> + To: <select name="toLang" id="toLang"><option value="">All languages</option></select> + <input type="button" value="Translate" onclick="updateTranslation()" /> + </p> + </form> + <div id="output"></div> + </body> +</html> diff --git a/old-lib/javascript/translator.js b/old-lib/javascript/translator.js new file mode 100644 index 000000000..31da04290 --- /dev/null +++ b/old-lib/javascript/translator.js @@ -0,0 +1,51 @@ +function formatTranslation (outputs) { + var dl1 = document.createElement("dl"); + dl1.className = "fromLang"; + for (var fromLang in outputs) { + var ul = document.createElement("ul"); + addDefinition(dl1, document.createTextNode(fromLang), ul); + for (var i in outputs[fromLang]) { + var dl2 = document.createElement("dl"); + dl2.className = "toLang"; + for (var toLang in outputs[fromLang][i]) { + addDefinition(dl2, document.createTextNode(toLang), document.createTextNode(outputs[fromLang][i][toLang])); + } + addItem(ul, dl2); + } + } + + return dl1; +} + +/* DOM utilities for specific tags */ + +function addDefinition (dl, t, d) { + var dt = document.createElement("dt"); + dt.appendChild(t); + dl.appendChild(dt); + var dd = document.createElement("dd"); + dd.appendChild(d); + dl.appendChild(dd); +} + +function addItem (ul, i) { + var li = document.createElement("li"); + li.appendChild(i); + ul.appendChild(li); +} + +function addOption (select, value, content) { + var option = document.createElement("option"); + option.value = value; + option.appendChild(document.createTextNode(content)); + select.appendChild(option); +} + +/* General DOM utilities */ + +/* Removes all the children of a node */ +function removeChildren(node) { + while (node.hasChildNodes()) { + node.removeChild(node.firstChild); + } +} |
