+ }
+ return str;
+}
+exports.tkTreeToSExp = tkTreeToSExp;
+/**inspect the inner of the representation. */
+let repr = (x) => { return util.inspect(x, { depth: null }); };
+var TokenKind;
+(function (TokenKind) {
+ TokenKind[TokenKind["Seperator"] = 0] = "Seperator";
+ TokenKind[TokenKind["Semicolon"] = 1] = "Semicolon";
+ TokenKind[TokenKind["Number"] = 2] = "Number";
+ TokenKind[TokenKind["Op"] = 3] = "Op";
+ TokenKind[TokenKind["ExprMark"] = 4] = "ExprMark";
+ TokenKind[TokenKind["ExcapeAt"] = 5] = "ExcapeAt";
+ TokenKind[TokenKind["Paren"] = 6] = "Paren";
+ TokenKind[TokenKind["SpaceNL"] = 7] = "SpaceNL";
+ TokenKind[TokenKind["Id"] = 8] = "Id";
+ TokenKind[TokenKind["Str"] = 9] = "Str";
+ TokenKind[TokenKind["Comment"] = 10] = "Comment";
+})(TokenKind || (TokenKind = {}));
+/**
+ * Parsing
+ */
+const lexer = p.buildLexer([
+ [true, /^\d+(\.\d+)?/g, TokenKind.Number],
+ [true, /^\\\@/g, TokenKind.ExcapeAt],
+ [true, /^\/\*([^/]|\/[^*])*\*\//g, TokenKind.Comment],
+ [true, /^\;/g, TokenKind.Semicolon],
+ [true, /^[-][-][-]/g, TokenKind.Seperator],
+ [true, /^[\+\-\*\/\&\|\!\^\<\>\~\=\?]+/g, TokenKind.Op],
+ [true, /^\@/g, TokenKind.ExprMark],
+ [true, /^[()\[\]{}]/g, TokenKind.Paren],
+ [true, /^["]([\"]|[\\].)*["]/g, TokenKind.Str],
+ [true, /^[']([\']|[\\].)*[']/g, TokenKind.Str],
+ [true, /^[()\[\]{}]/g, TokenKind.Paren],
+ [true, /^[^\/\\\@\s\n\t\r;]+/g, TokenKind.Id],
+ [true, /^(\s|\n|\r|\t)+/g, TokenKind.SpaceNL],
+]);
+/**
+ *
+ * # TEST
+ */
+const inputTxt = `import a as b; /*bacourt*/
+/* ba choir
+ipsum lorem*/
+
+import you as john;
+---
+
+臺中市\\\@
+
+公園
+@1+2==3;
+
+console.log("122");@
+
+山頂
+`;
+const PROG = p.rule();
+const SEGMENT = p.rule();
+const IMPORT = p.rule();
+const IMPORTS = p.rule();
+const SEMICOLON = p.rule();
+const EXCAPE_AT = p.rule();
+const NOT_AT_TEXT = p.rule();
+const CONTENT = p.rule();
+let doubleMinus = { type: 'Punctuator', value: '--' };
+let doubleMinus2 = p.str('--');
+const TERM = p.rule();
+function applySegment(input) {
+ let unpackedInnerExprs = input[1].map((x) => { return x.text; });
+ return ["%exprs", unpackedInnerExprs];
+}
+function applySemiColon(value) {
+ return value.text;
+}
+function applyParts(first, second) {
+ return ["%clo", first, second[1]];
+}
+function applyComment(value) {
+ return [value.text];
+}
+function applyImport(input) {
+ let importTail = input[1].map(x => x.text);
+ return ["import"].concat(importTail);