html转换成抽象语法树,如何将LR(1)解析转换为抽象语法树?

我已经编码了一个表驱动的LR(1)解析器,并且运行良好,但是在将解析解析为语法树/抽象语法树的阶段中,我有些脱节。 这是一个我非常热衷的项目,但是我真的在这里陷入了僵局。 提前谢谢你的帮助。

编辑:同样,我的解析器仅使用2d数组和一个动作对象,该对象告诉它下一步去哪里,或者它减少了哪里去以及弹出多少项目。 我注意到许多人使用访客模式。 我不确定他们如何知道要制作哪种类型的节点。

这是上下文的下推自动机while (lexer.hasNext() || parseStack.size() > 0) {

Action topOfStack = parseStack.peek();

token = parseStack.size() > 0 ? lexer.nextToken() : new Token(TokenType.EOF, "EOF");

topOfStack.setToken(token);

int row = topOfStack.getTransitionIndex();

int column = getTerminalIndex(token.getLexeme());

column = token.getType() == TokenType.IDENTIFIER

&& !terminalsContain(token.getLexeme()) ? 0 : column;

Action action = actionTable[row][column];

if (action instanceof Accept) {

System.out.println("valid parse!!!!!!");

} else if (action instanceof Reduction) {

Reduction reduction = (Reduction) action;

popStack(parseStack, reduction.getNumberOfItemsToPop());

column = reduction.getTransitionIndex();

row = parseStack.peek().getTransitionIndex();

parseStack.push(new Action(gotoTable[row][column]));

lexer.backupTokenStream();

} else if (action != null) {

parseStack.push(actionTable[row][column]);

} else {

System.out.println("Parse error");

System.out.println("On token: " + token.getLexeme());

break;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值