Skip to content
Snippets Groups Projects
Commit 6eb76f1e authored by marihachi's avatar marihachi
Browse files

revert way to build peg

parent 7cf838ab
No related branches found
No related tags found
No related merge requests found
......@@ -7,8 +7,8 @@
"scripts": {
"build": "npm run tsc && npm run peg && npm run webpack",
"build-dev": "npm run tsc && npm run peg-dev && npm run webpack-dev",
"peg": "node ./built/build",
"peg-dev": "node ./built/build trace",
"peg": "mkdirp ./built/parser && pegjs -o built/parser/core-parser.js --allowed-start-rules root,plain src/parser/core-parser.pegjs",
"peg-dev": "mkdirp ./built/parser && pegjs -o built/parser/core-parser.js --allowed-start-rules root,plain --trace src/parser/core-parser.pegjs",
"tsc": "tsc",
"webpack": "webpack --mode=production",
"webpack-dev": "webpack --mode=development",
......
import { promises as fs } from 'fs';
import path from 'path';
import { generateCode } from './misc/generate-peg';
async function entryPoint() {
// get arguments
let trace = false;
if (process.argv.some(i => i == 'trace')) {
trace = true;
}
const srcPath = path.join(__dirname, '../src/parser/core-parser.pegjs');
const destPath = path.join(__dirname, '../built/parser/core-parser.js');
// generate a code from PEG
const generatedCode = await generateCode(srcPath, trace);
// write the generated code
await fs.writeFile(destPath, generatedCode, { encoding: 'utf8' });
}
entryPoint()
.catch(err => {
console.log(err);
process.exit(1);
});
import { promises as fs } from 'fs';
import peg from 'pegjs';
export async function generateParser(srcPath: string, trace?: boolean): Promise<peg.Parser>
{
// read the parser source
const source = await fs.readFile(srcPath, 'utf8');
// generate a parser code
const generatedCode = peg.generate(source, {
allowedStartRules: ['root', 'all', 'inline'],
trace: trace
});
return generatedCode;
}
export async function generateCode(srcPath: string, trace?: boolean): Promise<string>
{
// read the parser source
const source = await fs.readFile(srcPath, 'utf8');
// generate a parser code
const generatedCode = peg.generate(source, {
allowedStartRules: ['root', 'all', 'inline'],
output: 'source',
format: 'commonjs',
trace: trace
});
return generatedCode;
}
......@@ -4,23 +4,17 @@
mergeText
} = require('./parser-utils');
function applyParser(input, rule) {
function applyParser(input, startRule) {
let parseFunc = peg$parse;
return parseFunc(input, rule ? { startRule : rule } : { });
return parseFunc(input, startRule ? { startRule } : { });
}
}
root
= ts:all*
{
return mergeText(ts);
}
all
= block / inline
= ts:(block / inline)* { return mergeText(ts); }
// plain
// =
plain
= ts:(text /*/ emoji*/)* { return mergeText(ts); }
block
= title
......@@ -30,8 +24,10 @@ block
inline
= big
/ c:. { return createTree('text', { text: c }); }
/ text
text
= c:. { return createTree('text', { text: c }); }
// block: title
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment