如何定义以换行符分隔的Sort列表?语法报错求解
如何用换行符定义Sort列表?
直接在语法规则里把换行符写成分隔符会触发解析错误,核心原因是默认语法分析器会把换行符当作空白字符忽略掉,不会将其识别为有效的分隔标记——这也是你用逗号能正常运行的原因:逗号是显式的非空白token,不会被跳过。
解决方法如下:
- 先定义换行符的词法规则,让解析器把它当作一个独立token:
lexical NL = "\n";
- 自定义Layout规则,避免换行符被当作空白跳过:
layout MyLayout = [\t-\r ]* (!NL [\t-\r ]*)*;
这个规则允许普通空白(空格、制表符等),但会保留换行符作为独立token。
- 最后在你的Entity语法中使用自定义Layout,并指定NL作为分隔符:
syntax Entity = entity: "entity" EntityName entityName {Attribute NL}* attribs "end" ;
如果不需要严格强制换行分隔,也可以用{Attribute}+来定义一个或多个Attribute,同时调整Layout允许Attribute之间用换行分隔,这种情况下无需显式写分隔符,解析器会自动识别换行作为元素间的分隔。
内容的提问来源于stack exchange,提问作者Wayne
相关产品推荐
相关产品推荐

