0

我需要解析以下内容

model { 

// any content, including brackets {}

var x= {} ; 

// any content, including brackets {}
}

如果我这样做:

model : MODEL OBR modelBody CBR;

modelBody: modelBodyLine;

modelBodyLine: TEXT* (OBR TEXT* CBR)* TEXT*;

TEXT : ('a'..'z'|'A'..'Z'| '_' | '-')+ ;
OBR: '{';
CBR: '}';

我收到这个错误

警告(200):/SWL Parser/src/ro/sft/swl/language/parser/SWL.g:46:16:决策可以匹配输入,例如“TEXT”,使用多种替代方法:1、2 结果,替代(s) 2 被禁用该输入|---> modelBodyLine: TEXT* (OBR TEXT* CBR)* TEXT*;

那么解析它的最佳方法是什么?

4

1 回答 1

1

对于这些情况,我使用以下genericBlock规则。此规则依赖于您的词法分析器至少CBR正确地为最终返回一个标记,并为它创建的每个嵌套标记}正确匹配一个标记。CBROBR

genericBlock
  : OBR
    ( ~(OBR | CBR)
    | genericBlock
    )*
    CBR
  ;
于 2013-07-04T15:55:45.097 回答