控制的解析器是每一个 { 关闭并匹配最接近的一个

问题描述

我的扫描仪工作正常,但我找不到我的解析器有什么问题

semi: "{" vallist "}"
    | "{" "}""
    ;
val: tSTR
   | tInt
   ;
vallist: vallist,val
       | val
       ;

解决方法

您遇到了许多问题,其中一些可能只是您复制粘贴中的拼写错误(您上面的内容将被野牛拒绝)。

您的主要问题可能是对您的令牌使用 "(双引号),这在大多数情况下没有任何用处——它创建了一个与单个令牌不同的“新”令牌您的词法分析器可能会返回的字符标记。

相反,您想使用 '(单引号):

semi: '{' vallist '}'
    | '{' '}'
    ;
val: tSTR
   | tInt
   | semi
   ;
vallist: vallist ',' val
       | val
       ;