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

请求创建符合特定规则的Yacc表达式语法,修复现有语法缺陷

修复Yacc表达式解析语法的问题

你的语法无法解析1;1;\n1;1的核心原因是:当处理到第二个;后的换行符时,语法会匹配expressions NEWLINE规则,将1;1;\n作为新的expressions,但后续的1;1无法匹配任何现有规则——原语法没有定义expressions后直接跟Number的情况,仅允许expressions后接换行符或分号+可选数字。

以下是修改后的语法,可覆盖所有需求场景:

%{
package main
%}

%union {
    token Token
}

%token<token> Number 

%%

start: expressions line_breaks
;

expressions: Number
    | expressions separator Number
    | expressions separator
;

separator: line_breaks SEMICOLON line_breaks
    | line_breaks
;

line_breaks: /* empty */
    | line_breaks NEWLINE
;

NEWLINE: '\n';
SEMICOLON: ';' ;

%%

修改说明

  1. 新增line_breaks规则:允许零个或多个连续换行符,覆盖换行的各种出现场景。
  2. 定义separator规则:将分号、分号前后的换行、单独换行统一作为分隔符,满足“换行可位于分号前后或单独分隔”的需求。
  3. 重构expressions规则:
    • 支持单个数字
    • 支持通过分隔符连接多个数字
    • 允许表达式以分隔符结尾(满足最后一个分号可选的规则)
  4. start规则新增line_breaks:允许表达式末尾存在换行符,增强兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:07:20