forked from GitHub/gf-core
Merge branch 'master' of https://github.com/GrammaticalFramework/gf-core
This commit is contained in:
7
src/runtime/javascript/DEPRECATED.md
Normal file
7
src/runtime/javascript/DEPRECATED.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# Deprecation notice
|
||||||
|
|
||||||
|
As of June 2019, this JavaScript version of the GF runtime is considered deprecated,
|
||||||
|
in favour of the TypeScript version in `../typescript/gflib.ts`.
|
||||||
|
|
||||||
|
If you don't want/need TypeScript and are just looking for a ready-to-use JavaScript version,
|
||||||
|
see `../typescript/js/gflib.js` which is generated directly from the TypeScript version.
|
||||||
File diff suppressed because it is too large
Load Diff
18
src/runtime/typescript/.eslintrc
Normal file
18
src/runtime/typescript/.eslintrc
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"plugins": ["@typescript-eslint"],
|
||||||
|
"extends": ["plugin:@typescript-eslint/recommended"],
|
||||||
|
"rules": {
|
||||||
|
"indent": "off",
|
||||||
|
"@typescript-eslint/indent": ["warn", 2],
|
||||||
|
"@typescript-eslint/no-use-before-define": ["error", {
|
||||||
|
"functions": false,
|
||||||
|
"classes": false
|
||||||
|
}],
|
||||||
|
"semi": "off",
|
||||||
|
"@typescript-eslint/semi": ["warn", "never"],
|
||||||
|
"quotes": ["warn", "single"],
|
||||||
|
"@typescript-eslint/camelcase": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }],
|
||||||
|
}
|
||||||
|
}
|
||||||
31
src/runtime/typescript/README.md
Normal file
31
src/runtime/typescript/README.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# GF TypeScript Runtime
|
||||||
|
|
||||||
|
`gflib.ts` is a TypeScript implementation of the GF runtime.
|
||||||
|
It is ported from an older JavaScript implementation [`gflib.js`](../javascript/gflib.js),
|
||||||
|
with some improvements.
|
||||||
|
|
||||||
|
Importantly, all **future** updates will only be made to this TypeScript version.
|
||||||
|
|
||||||
|
## Applicability
|
||||||
|
|
||||||
|
This runtime allows you use GF in pure JavaScript, and thus have GF-powered apps without the need for a server backend.
|
||||||
|
However, it has not been actively maintained as the other runtimes have been.
|
||||||
|
So its features are limited and it is not efficient, making it really only useful for smaller grammars.
|
||||||
|
|
||||||
|
## Using
|
||||||
|
|
||||||
|
`gflib.ts` can be transpiled to JavaScript by running `tsc` in this folder (of course you need TypeScript installed).
|
||||||
|
It has no module dependencies.
|
||||||
|
You can then include the generated `js/gflib.js` file in your application as usual.
|
||||||
|
|
||||||
|
_This generated JavaScript version is also included under version control,
|
||||||
|
to make it easy for someone to use without having to install TypeScript._
|
||||||
|
|
||||||
|
Your GF grammar should be compiled with: `gf --make --output-format=js`
|
||||||
|
|
||||||
|
For an example of a working web application using the JavaScript runtime, see `../javascript`.
|
||||||
|
|
||||||
|
## What happened to `gflib.d.ts`?
|
||||||
|
|
||||||
|
There was once a file here called `gflib.d.ts`, which contained TypeScript type definitions for the **old** `gflib.js`.
|
||||||
|
Since the runtime is now ported to TypeScript, those type definitions are no longer necessary (plus they contained many errors).
|
||||||
337
src/runtime/typescript/gflib.d.ts
vendored
337
src/runtime/typescript/gflib.d.ts
vendored
@@ -1,337 +0,0 @@
|
|||||||
/**
|
|
||||||
* gflib.dt.s
|
|
||||||
*
|
|
||||||
* by John J. Camilleri
|
|
||||||
*
|
|
||||||
* TypeScript type definitions for the "original" JS GF runtime (GF:src/runtime/javascript/gflib.js)
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Note: the String prototype is extended with:
|
|
||||||
// String.prototype.tag = "";
|
|
||||||
// String.prototype.setTag = function (tag) { this.tag = tag; };
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A GF grammar is one abstract and multiple concretes
|
|
||||||
*/
|
|
||||||
declare class GFGrammar {
|
|
||||||
abstract: GFAbstract
|
|
||||||
concretes: {[key: string]: GFConcrete}
|
|
||||||
|
|
||||||
constructor(abstract: GFAbstract, concretes: {[key: string]: GFConcrete})
|
|
||||||
|
|
||||||
translate(
|
|
||||||
input: string,
|
|
||||||
fromLang: string,
|
|
||||||
toLang: string
|
|
||||||
): {[key: string]: {[key: string]: string}}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract Syntax Tree
|
|
||||||
*/
|
|
||||||
declare class Fun {
|
|
||||||
name: string
|
|
||||||
args: Fun[]
|
|
||||||
|
|
||||||
constructor(name: string, ...args: Fun[])
|
|
||||||
|
|
||||||
print(): string
|
|
||||||
show(): string
|
|
||||||
getArg(i: number): Fun
|
|
||||||
setArg(i: number, c: Fun): void
|
|
||||||
isMeta(): boolean
|
|
||||||
isComplete(): boolean
|
|
||||||
isLiteral(): boolean
|
|
||||||
isString(): boolean
|
|
||||||
isInt(): boolean
|
|
||||||
isFloat(): boolean
|
|
||||||
isEqual(obj: any): boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract syntax
|
|
||||||
*/
|
|
||||||
declare class GFAbstract {
|
|
||||||
startcat: string
|
|
||||||
types: {[key: string]: Type} // key is function name
|
|
||||||
|
|
||||||
constructor(startcat: string, types: {[key: string]: Type})
|
|
||||||
|
|
||||||
addType(fun: string, args: string[], cat: string): void
|
|
||||||
getArgs(fun: string): string[]
|
|
||||||
getCat(fun: string): string
|
|
||||||
annotate(tree: Fun, type: string): Fun
|
|
||||||
handleLiterals(tree: Fun, type: Type): Fun
|
|
||||||
copyTree(x: Fun): Fun
|
|
||||||
parseTree(str: string, type: string): Fun
|
|
||||||
parseTree_(tokens: string[], prec: number): Fun
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Type
|
|
||||||
*/
|
|
||||||
declare class Type {
|
|
||||||
args: string[]
|
|
||||||
cat: string
|
|
||||||
|
|
||||||
constructor(args: string[], cat: string)
|
|
||||||
}
|
|
||||||
|
|
||||||
type ApplyOrCoerce = Apply | Coerce
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Concrete syntax
|
|
||||||
*/
|
|
||||||
declare class GFConcrete {
|
|
||||||
flags: {[key: string]: string}
|
|
||||||
productions: {[key: number]: ApplyOrCoerce[]}
|
|
||||||
functions: CncFun[]
|
|
||||||
sequences: Array<Array<Sym>>
|
|
||||||
startCats: {[key: string]: {s: number, e: number}}
|
|
||||||
totalFIds: number
|
|
||||||
pproductions: {[key: number]: ApplyOrCoerce[]}
|
|
||||||
lproductions: {[key: string]: {fid: FId, fun: CncFun}}
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
flags: {[key: string]: string},
|
|
||||||
productions: {[key: number]: ApplyOrCoerce[]},
|
|
||||||
functions: CncFun[],
|
|
||||||
sequences: Array<Array<Sym>>,
|
|
||||||
startCats: {[key: string]: {s: number, e: number}},
|
|
||||||
totalFIds: number
|
|
||||||
)
|
|
||||||
|
|
||||||
linearizeSyms(tree: Fun, tag: string): Array<{fid: FId, table: any}>
|
|
||||||
syms2toks(syms: Sym[]): string[]
|
|
||||||
linearizeAll(tree: Fun): string[]
|
|
||||||
linearize(tree: Fun): string
|
|
||||||
tagAndLinearize(tree: Fun): string[]
|
|
||||||
unlex(ts: string): string
|
|
||||||
tagIt(obj: any, tag: string): any
|
|
||||||
// showRules(): string // Uncaught TypeError: Cannot read property 'length' of undefined at gflib.js:451
|
|
||||||
tokenize(string: string): string[]
|
|
||||||
parseString(string: string, cat: string): Fun[]
|
|
||||||
complete(
|
|
||||||
input: string,
|
|
||||||
cat: string
|
|
||||||
): {consumed: string[], suggestions: string[]}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function ID
|
|
||||||
*/
|
|
||||||
type FId = number
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply
|
|
||||||
*/
|
|
||||||
declare class Apply {
|
|
||||||
id: string
|
|
||||||
fun: FId
|
|
||||||
args: PArg[]
|
|
||||||
|
|
||||||
constructor(fun: FId, args: PArg[])
|
|
||||||
|
|
||||||
show(cat: string): string
|
|
||||||
isEqual(obj: any): boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PArg
|
|
||||||
*/
|
|
||||||
declare class PArg {
|
|
||||||
fid: FId
|
|
||||||
hypos: any[]
|
|
||||||
|
|
||||||
constructor(fid: FId, ...hypos: any[])
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Coerce
|
|
||||||
*/
|
|
||||||
declare class Coerce {
|
|
||||||
id: string
|
|
||||||
arg: FId
|
|
||||||
|
|
||||||
constructor(arg: FId)
|
|
||||||
|
|
||||||
show(cat: string): string
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Const
|
|
||||||
*/
|
|
||||||
declare class Const {
|
|
||||||
id: string
|
|
||||||
lit: Fun
|
|
||||||
toks: any[]
|
|
||||||
|
|
||||||
constructor(lit: Fun, toks: any[])
|
|
||||||
|
|
||||||
show(cat: string): string
|
|
||||||
isEqual(obj: any): boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CncFun
|
|
||||||
*/
|
|
||||||
declare class CncFun {
|
|
||||||
name: string
|
|
||||||
lins: FId[]
|
|
||||||
|
|
||||||
constructor(name: string, lins: FId[])
|
|
||||||
}
|
|
||||||
|
|
||||||
type Sym = SymCat | SymKS | SymKP | SymLit
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SymCat
|
|
||||||
*/
|
|
||||||
declare class SymCat {
|
|
||||||
id: string
|
|
||||||
i: number
|
|
||||||
label: number
|
|
||||||
|
|
||||||
constructor(i: number, label: number)
|
|
||||||
|
|
||||||
getId(): string
|
|
||||||
getArgNum(): number
|
|
||||||
show(): string
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SymKS
|
|
||||||
*/
|
|
||||||
declare class SymKS {
|
|
||||||
id: string
|
|
||||||
tokens: string[]
|
|
||||||
|
|
||||||
constructor(...tokens: string[])
|
|
||||||
|
|
||||||
getId(): string
|
|
||||||
show(): string
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SymKP
|
|
||||||
*/
|
|
||||||
declare class SymKP {
|
|
||||||
id: string
|
|
||||||
tokens: string[]
|
|
||||||
alts: Alt[]
|
|
||||||
|
|
||||||
constructor(tokens: string[], alts: Alt[])
|
|
||||||
|
|
||||||
getId(): string
|
|
||||||
show(): string
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Alt
|
|
||||||
*/
|
|
||||||
declare class Alt {
|
|
||||||
tokens: string[]
|
|
||||||
prefixes: string[]
|
|
||||||
|
|
||||||
constructor(tokens: string[], prefixes: string[])
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SymLit
|
|
||||||
*/
|
|
||||||
declare class SymLit {
|
|
||||||
id: string
|
|
||||||
i: number
|
|
||||||
label: number
|
|
||||||
|
|
||||||
constructor(i: number, label: number)
|
|
||||||
|
|
||||||
getId(): string
|
|
||||||
show(): string
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trie
|
|
||||||
*/
|
|
||||||
declare class Trie {
|
|
||||||
value: any
|
|
||||||
items: Trie[]
|
|
||||||
|
|
||||||
insertChain(keys, obj): void
|
|
||||||
insertChain1(keys, obj): void
|
|
||||||
lookup(key, obj): any
|
|
||||||
isEmpty(): boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ParseState
|
|
||||||
*/
|
|
||||||
declare class ParseState {
|
|
||||||
concrete: GFConcrete
|
|
||||||
startCat: string
|
|
||||||
items: Trie
|
|
||||||
chart: Chart
|
|
||||||
|
|
||||||
constructor(concrete: GFConcrete, startCat: string)
|
|
||||||
|
|
||||||
next(token: string): boolean
|
|
||||||
complete(correntToken: string): Trie
|
|
||||||
extractTrees(): any[]
|
|
||||||
process(
|
|
||||||
agenda,
|
|
||||||
literalCallback: (fid: FId) => any,
|
|
||||||
tokenCallback: (tokens: string[], item: any) => any
|
|
||||||
): void
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chart
|
|
||||||
*/
|
|
||||||
declare class Chart {
|
|
||||||
active: any
|
|
||||||
actives: {[key: number]: any}
|
|
||||||
passive: any
|
|
||||||
forest: {[key: number]: ApplyOrCoerce[]}
|
|
||||||
nextId: number
|
|
||||||
offset: number
|
|
||||||
|
|
||||||
constructor(concrete: GFConcrete)
|
|
||||||
|
|
||||||
lookupAC(fid: FId,label)
|
|
||||||
lookupACo(offset, fid: FId, label)
|
|
||||||
|
|
||||||
labelsAC(fid: FId)
|
|
||||||
insertAC(fid: FId, label, items): void
|
|
||||||
|
|
||||||
lookupPC(fid: FId, label, offset)
|
|
||||||
insertPC(fid1: FId, label, offset, fid2: FId): void
|
|
||||||
shift(): void
|
|
||||||
expandForest(fid: FId): any[]
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ActiveItem
|
|
||||||
*/
|
|
||||||
declare class ActiveItem {
|
|
||||||
offset: number
|
|
||||||
dot: number
|
|
||||||
fun: CncFun
|
|
||||||
seq: Array<Sym>
|
|
||||||
args: PArg[]
|
|
||||||
fid: FId
|
|
||||||
lbl: number
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
offset: number,
|
|
||||||
dot: number,
|
|
||||||
fun: CncFun,
|
|
||||||
seq: Array<Sym>,
|
|
||||||
args: PArg[],
|
|
||||||
fid: FId,
|
|
||||||
lbl: number
|
|
||||||
)
|
|
||||||
|
|
||||||
isEqual(obj: any): boolean
|
|
||||||
shiftOverArg(i: number, fid: FId): ActiveItem
|
|
||||||
shiftOverTokn(): ActiveItem
|
|
||||||
}
|
|
||||||
1619
src/runtime/typescript/gflib.ts
Normal file
1619
src/runtime/typescript/gflib.ts
Normal file
File diff suppressed because it is too large
Load Diff
1164
src/runtime/typescript/js/gflib.js
Normal file
1164
src/runtime/typescript/js/gflib.js
Normal file
File diff suppressed because it is too large
Load Diff
1
src/runtime/typescript/js/gflib.js.map
Normal file
1
src/runtime/typescript/js/gflib.js.map
Normal file
File diff suppressed because one or more lines are too long
12
src/runtime/typescript/tsconfig.json
Normal file
12
src/runtime/typescript/tsconfig.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "none",
|
||||||
|
"target": "es3",
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"removeComments": true,
|
||||||
|
"outDir": "js",
|
||||||
|
"sourceMap": true
|
||||||
|
},
|
||||||
|
"compileOnSave": true
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user