76 lines
1.6 KiB
JavaScript
76 lines
1.6 KiB
JavaScript
const assert = require('assert');
|
|
const fs = require('fs');
|
|
const fspath = require('path');
|
|
|
|
const parser = require('./kernel');
|
|
|
|
class BaseParser {
|
|
constructor() {
|
|
this._parser = this.makeParser();
|
|
}
|
|
makeParser() {}
|
|
/**
|
|
* @description 解析HDL代码
|
|
* @param {string} code
|
|
* @returns {object}
|
|
*/
|
|
parse(code) {
|
|
return this._parser.parse(code);
|
|
}
|
|
|
|
/**
|
|
* @description 给出词法解析结果
|
|
* @param {string} code
|
|
* @returns {{comments: Array<CommentResult>,
|
|
* defines: object,
|
|
* includes: object,
|
|
* symbols: Array<SymbolResult>}}
|
|
*/
|
|
symbol(code) {
|
|
return this._parser.symbol(code);
|
|
}
|
|
|
|
lint(code) {
|
|
return this._parser.lint(code);
|
|
}
|
|
}
|
|
|
|
|
|
class VlogParser extends BaseParser {
|
|
makeParser() {
|
|
return new parser.vlog();
|
|
}
|
|
}
|
|
|
|
class VhdlParser extends BaseParser {
|
|
makeParser() {
|
|
return new parser.vhdl();
|
|
}
|
|
}
|
|
|
|
|
|
const vhdlParser = new VhdlParser();
|
|
const vlogParser = new VlogParser();
|
|
|
|
function vlogFast(path) {
|
|
const source = fs.readFileSync(path, 'utf-8') + '\n';
|
|
const s1 = Date.now();
|
|
const old_res = vlogParser.parse(source);
|
|
console.log(path, '<old> compute', Date.now() - s1, 'ms');
|
|
}
|
|
|
|
|
|
function vlogAll(path) {
|
|
const source = fs.readFileSync(path, 'utf-8') + '\n';
|
|
const s1 = Date.now();
|
|
const old_res = vlogParser.symbol(source);
|
|
console.log(path, '<old> compute', Date.now() - s1, 'ms');
|
|
}
|
|
|
|
module.exports = {
|
|
vhdlParser,
|
|
vlogParser,
|
|
parser,
|
|
vlogFast,
|
|
vlogAll
|
|
} |