【发布时间】:2018-08-24 06:02:37
【问题描述】:
我正在尝试在 Angular 项目中使用 antlr4 解析器。
有一个数据服务类,其中调用的函数如下所示
parseRule() {
const ruleString = ' STRING TO PARSE';
const inputStream = new ANTLRInputStream(ruleString);
const lexObject = new lexer.scopeLexer(inputStream);
const tokenStream = new CommonTokenStream(lexObject);
const parseObject = new parser.scopeParser(tokenStream);
const result = parseObject.file();
const evaluator = new ScopeEvaluator();
const walker = new ParseTreeWalker();
walker.walk(evaluator, result);
console.log(' result :', result.text);
}
客户侦听器正在实现仅使用一种方法导出的接口,即 enterNonGraphScope。
import { scopeListener } from './antlrscope/scopeListener';
import { NonGraphScopeContext, NamesetSimpleContext } from './antlrscope/scopeParser';
export class ScopeEvaluator implements scopeListener {
constructor() {
console.log('constructed the asdfasf');
}
enterNonGraphScope = function (ctx: NonGraphScopeContext) {
console.log('Tis ', ctx.text);
};
}
从 scopeListener.ts 中粘贴一些 sn-p 用于说明界面
export interface scopeListener extends ParseTreeListener {
/**
* Enter a parse tree produced by the `NonGraphScope`
* labeled alternative in `scopeParser.scope`.
* @param ctx the parse tree
*/
enterNonGraphScope?: (ctx: NonGraphScopeContext) => void;
当我运行 angular ng serve 时,它正在编译打字稿代码。 我收到一个错误
src/app/rule-parser.service.ts(31,17) 中的错误:错误 TS2559:“ScopeEvaluator”类型与“ParseTreeListener”类型没有共同的属性。
下面是打字稿中生成的监听器。 (删除内容和antlr生成的cmets)
export interface scopeListener extends ParseTreeListener {
enterNonGraphScope?: (ctx: NonGraphScopeContext) => void;
exitNonGraphScope?: (ctx: NonGraphScopeContext) => void;
enterBlockScope?: (ctx: BlockScopeContext) => void;
exitBlockScope?: (ctx: BlockScopeContext) => void;
enterNamesetSimple?: (ctx: NamesetSimpleContext) => void;
exitNamesetSimple?: (ctx: NamesetSimpleContext) => void;
enterGrainExpression?: (ctx: GrainExpressionContext) => void;
exitGrainExpression?: (ctx: GrainExpressionContext) => void;
enterGrainSimple?: (ctx: GrainSimpleContext) => void;
exitGrainSimple?: (ctx: GrainSimpleContext) => void;
enterNamesetExpression?: (ctx: NamesetExpressionContext) => void;
}
这似乎与打字稿解释或打字有关。 我是 javascript/typescript 的新手。你能帮帮我吗?
webpack / 生成的 javascript 代码运行良好,但此错误阻止生成构建。
非常感谢!
-维纳亚克
【问题讨论】:
标签: angularjs typescript antlr4