You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PEG.js语法中实现十进制、十六进制、二进制多行输出

扩展PEG.js算术语法实现多格式输出与多行输入支持

以下是修改后的PEG.js语法,直接适配你的需求——支持多行输入,每个算术表达式的结果输出十进制、十六进制、8位二进制三种格式:

Start
  = expressions:Expression+ {
      return expressions.map(expr => {
        const dec = expr.toString();
        const hex = expr.toString(16);
        const bin = expr.toString(2).padStart(8, '0');
        return `${dec}\n${hex}\n${bin}`;
      }).join('\n');
    }

Expression
  = Addition

Addition
  = left:Multiplication (("+" / "-") right:Multiplication { left += right; })* { return left; }

Multiplication
  = left:Primary (("*" / "/") right:Primary { left *= right; })* { return left; }

Primary
  = Number / ParenthesizedExpression

ParenthesizedExpression
  = "(" expr:Expression ")" { return expr; }

Number
  = digits:[0-9]+ { return parseInt(digits.join(''), 10); }

关键修改说明

  • 顶层规则Start:匹配一个或多个表达式,处理多行输入。将每个表达式的结果转换为三种格式后,用换行拼接所有结果。
  • 结果格式化逻辑:
    • 十进制:直接将计算结果转为字符串
    • 十六进制:使用toString(16)获取小写十六进制值(若需大写可改用toString(16).toUpperCase())
    • 二进制:用toString(2)获取二进制字符串,再通过padStart(8, '0')补前导零至8位
  • 核心算术逻辑:保留原PEG.js算术语法的加减乘除、括号优先级规则,确保计算准确性

使用示例

输入:

(3*(5+8))
15-7

输出:

39
27
00100111
8
8
00001000

内容的提问来源于stack exchange,提问作者HabibS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:35:07