working on parsers

This commit is contained in:
jmosrael@gmail.com
2024-05-16 17:39:01 -07:00
parent 8fa06736b4
commit eef238c834
4 changed files with 67 additions and 1 deletions

View File

@@ -2,7 +2,7 @@ import express from 'express'
import { json } from 'body-parser'
import { Sequelize } from 'sequelize'
import { database, Character, Game, Pick, App } from './db'
import { lexr, orderByLexr, parseOrderByString } from './tokenizer'
import { lexr, parseOrderByString, FilterParser } from './tokenizer'
const app = express()
const jsonParser = json()
@@ -50,6 +50,15 @@ app.post('/api/game', jsonParser, async (req, res) => {
})
const pageCount = Math.ceil((await Character.count()) / count)
let fp = new FilterParser()
fp.lexer
.input(filter)
.tokens()
.forEach((t) => {
console.log(t)
})
res.setHeader('Content-Type', 'application/json')
res.send({ gameData, pageCount })
})

View File

@@ -1,4 +1,5 @@
import Tokenizr from 'tokenizr'
import ASTY from 'asty'
export const lexr = new Tokenizr()
@@ -47,3 +48,49 @@ export function parseOrderByString(orderBy: string) {
}
return output
}
const openGroupRegex = /\(/
const closeGroupRegex = /\)/
const conjunctinoRegex = /AND|OR/
const statementRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?([a-zA-Z\d"']+)/
const spacerRegex = /\s/
export class FilterParser {
lexer: Tokenizr = this.createLexer()
constructor() {}
private createLexer(): Tokenizr {
const tkz = new Tokenizr()
tkz.rule(openGroupRegex, (ctx, m) => {
ctx.accept('opengroup')
})
tkz.rule(closeGroupRegex, (ctx, m) => {
ctx.accept('closegroup')
})
tkz.rule(conjunctinoRegex, (ctx, m) => {
ctx.accept('conjunction', m[0])
})
tkz.rule(statementRegex, (ctx, m) => {
ctx.accept('column', m[1])
ctx.accept('opperator', m[2])
ctx.accept('value', m[3])
})
tkz.rule(spacerRegex, (ctx, m)=> {
ctx.ignore();
})
return tkz
}
buildAST(): ASTY {
const ast = new ASTY()
}
}