2016-01-13 7 views
0

В настоящее время я работаю над грамматикой Xtext и получил некоторые проблемы с левыми рекурсивными графами. Я уже устранил все прямые левые рекурсии в моей грамматике, но теперь у меня есть некоторые косвенные левые рекурсии, которые показаны в IDE с сообщением This rule call is part of a left recursive call graph.Удалить левый рекурсивный график вызовов

Вот пример моей проблемы:

grammar com.stackoverflow.Example with org.eclipse.xtext.common.Terminals 

generate example "http://stackoverflow.com/Example" 

Type: 
    var157=ValueType | var158=ReferenceType; 

ValueType: 
    var160=StructType | var161=EnumType; 

StructType: 
    var162=TypeName | var163=SimpleType | var164=NullableType; 

TypeName: 
    var165=ID; 

SimpleType: 
    var166=NumericType | "bool"; 

NumericType: 
    "decimal"; 

NullableType: 
    var169=NonNullableValueType "?"; 

NonNullableValueType: 
    var170=Type; 

EnumType: 
    var171=TypeName; 

ReferenceType: 
    var172=ClassType | var173=InterfaceType | var174=ArrayType; 

ClassType: 
    var176=TypeName | "object" | "dynamic" | "string"; 

InterfaceType: 
    var177=TypeName; 

ArrayType: 
    var178=NonArrayType "[]"; 

NonArrayType: 
    var180=Type; 

Как разрешить такие левые рекурсии?

ответ

0

Эта грамматика на самом деле не оставлена ​​без внимания. и он весьма неоднозначен. , чтобы начать работать здесь, является отправной точкой (игнорируя двусмысленности и оставляя некоторые вещи)

Type: 
    ReferenceType; 

TypeName returns Type: 
    var165=ID; 

ReferenceType returns Type: 
    ClassType (({NullableType.type=current} "?") | ({ArrayType.componentType=current} "[]"))*; 

ClassType returns Type: 
    TypeName | ({ClassType} type=("object" | "dynamic" | "string")); 

 Смежные вопросы

  • Нет связанных вопросов^_^