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

Parser that controls is every { closed and matches the closest one

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

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

你有很多问题,其中一些可能只是你复制粘贴的错别字(你上面的问题会被野牛拒绝)。

您的主要问题可能是使用 "(双引号)作为您的标记,这在大多数情况下没有做任何有用的事情——它创建了一个 'new' 标记,而不是与您的词法分析器可能 returns.

的单个字符标记相同

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

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