gpt4 book ai didi

gold-parser - BNF 语法 + Gold LALR 解析器,无法区分特殊情况 NewLine 和 Whitespace

转载 作者:行者123 更新时间:2023-12-02 06:45:52 26 4
gpt4 key购买 nike

  • 我想将空格和换行符视为普通空格。
  • 我想将换行符与其他空格区分开来,以允许特殊情况。

第一次尝试编写兼容语法失败。

语法如下:

! ------------------------------------------------- Sets

{WS} = {Whitespace} - {CR} - {LF}
{ID Head} = {Letter} + [_]
{ID Tail} = {Alphanumeric} + [_]
{String Chars} = {Printable} + {HT} - ["\]

! ------------------------------------------------- Terminals

! The following defines the Whitespace terminal using the {WS}
! set - which excludes the carriage return and line feed
! characters

Whitespace = {WS}+ | {CR}{LF} | {CR} | {LF}
!NewLine = {CR}{LF} | {CR} | {LF}
MyNewLine = {CR}{LF} | {CR} | {LF}

最佳答案

它们是不明确的,因为它们都包含相同的子集 {CR}{LF} | {CR} | {LF}.

给定输入 {CR}{LF} 解析器无法判断它应该匹配哪个终端。

表驱动解析器并非真正设计用于直接处理“特殊情况”。如果你想在某些情况下忽略换行符,但在其他情况下赋予它们意义,那么你将不得不在你的缩减中处理它(即分别标记换行符,并在你的缩减中丢弃它们),但这会变得丑陋.

(可能)更好的解决方案是使用标记器状态(可能由解析器控制)来更改换行符输入的标记化方式。如果不完全理解你的语法就很难说。另外,我已经有几年没有弄乱这些东西了。

关于gold-parser - BNF 语法 + Gold LALR 解析器,无法区分特殊情况 NewLine 和 Whitespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/599409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com