ascoders/syntax-parser
ascoders/syntax-parser has 478 GitHub stars and 43 forks. Star changes are not measured yet. Last checked 2026-11-10 04:24 UTC. Last push 2023-10-28.
Comment ces chiffres sont mesurés
Light and fast 🚀parser! With zero dependents. - Sql Parser Demo added!
Progression mesurée des étoiles
- in 24h
- Mise à jour retardée
- in 7 days
- Mise à jour retardée
- in 15 days
- Mise à jour retardée
- in 1 month
- Mise à jour retardée
Variations nettes sur des périodes qui se chevauchent, pas des totaux quotidiens. Les mesures absentes restent vides. Les étoiles indiquent l’intérêt, pas la qualité.
README.md
Original
syntax-parser
syntax-parser is a parser using pure javascript, so it can both run in browser and nodejs.
syntax-parser supports:
- lexer.
- parser.
Lexer
createLexer can help you create a lexer.
Example
import { createLexer } from 'syntax-parser';
const myLexer = createLexer([
{
type: 'whitespace',
regexes: [/^(\s+)/],
ignore: true
},
{
type: 'word',
regexes: [/^([a-zA-Z0-9]+)/]
},
{
type: 'operator',
regexes: [/^(\+)/]
}
]);
myLexer('a + b');
// [
// { "type": "word", "value": "a", "position": [0, 1] },
// { "type": "operator", "value": "+", "position": [2, 3] },
// { "type": "word", "value": "b", "position": [4, 5] }
// ]
type
Token type name, you can use any value here, and you will use it in the parser stage.
regexes
Regexes that use to be matched for each Token type.
ignore
The matching Token will not be added to the Token result queue.
In general, whitespace can be ignored in syntax parsing.
Parser
createParser can help you create a parser. Parser requires a lexer.
import { createParser, chain, matchTokenType, many } from 'syntax-parser';
const root = () => chain(addExpr)(ast => ast[0]);
const addExpr = () =>
chain(matchTokenType('word'), many(addPlus))(ast => ({
left: ast[0].value,
operator: ast[1] && ast[1][0].operator,
right: ast[1] && ast[1][0].term
}));
const addPlus = () =>
chain('+', root)(ast => ({
operator: ast[0].value,
term: ast[1]
}));
const myParser = createParser(
root, // Root grammar.
myLexer // Created in lexer example.
);
myParser('a + b');
// ast:
// [{
// "left": "a",
// "operator": "+",
// "right": {
// "left": "b",
// "operator": null,
// "right": null
// }
// }]
chain
Basic grammatical element, support four parameters:
string
String means match token:
chain('select', 'table'); // Match 'select table'
array
Array means 'or':
chain('select', ['table', 'chart']); // Match both 'select table' and 'select chart'
matchTokenType
matchTokenType allow you match Token type defined in lexer.
chain('select', matchTokenType('word')); // Match 'select [any word!]'
function
It's easy to call another chain function:
const a = () => chain('select', b);
const b = () => chain('table');
many/optional
Just as literal meaning:
const a = () => chain('select', optional('table')); // Match both 'select' and 'select table'
const b = () => chain('select', many(',', matchTokenType('word'))); // Match both 'select' and 'select a' and 'select a, b' .. and so on.
optionalmanycan also usechainas parameter.many(chain(..))
The last callback allow partial redefin of local ast:
chain('select', 'table')(
ast => ast[0] // return 'select'
);
Tests
npm test
Monaco Editor Sql Editor

If you want to see this demo, run this command:
npm run docs
Then select demo Monaco Editor.
Explorer des projets similaires
Asabeneh/30-Days-Of-Python
Le défi de programmation 30 Days of Python est un guide pas à pas pour apprendre le langage de programmation Python en 30 jours. Ce défi peut prendre plus de 100 jours. Avancez à votre rythme. Ces vidéos peuvent aussi vous aider : https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 étoilesgrafana/grafana
Plateforme ouverte et composable d’observabilité et de visualisation de données. Visualise les métriques, les journaux et les traces issus de plusieurs sources, comme Prometheus, Loki, Elasticsearch, InfluxDB, Postgres et bien d’autres.
77,830 étoilesredis/redis
Pour les développeurs qui créent des applications en temps réel pilotées par les données, Redis est le cache, le serveur de structures de données et le moteur de requêtes documentaires et vectorielles préféré, le plus rapide et le plus riche en fonctionnalités.
77,395 étoilesapache/superset
Apache Superset est une plateforme de visualisation et d'exploration de données.
75,473 étoiles