Regarding Antlr rule matching [message #1724669] |
Thu, 25 February 2016 06:36  |
Eclipse User |
|
|
|
This is my grammar . There are some ambiguities but I have ignored that for now.
Model:
greetings=Query;
Query:
(key=QTypekeyWord)? (aggregation=Aggregation)? (measure=MeasureList) ((groupBy+=Group)? &(condition=Condtition)? &(range=Transition)?) ;
QTypekeyWord:
qKeyword='plot'
;
Aggregation:
agg=('average'|'number of'|'total')
;
Condtition:
con+='for' dimVal=DimensionValue 'as' dim=Dimension ('and' dimValue=DimensionValue 'as' dimen=Dimension)* |
conTimeCurrent= 'for this' thisTimeGroup=ThisTimeGroup |
conlastTimePast ='for last ' lastTimeGroup =LastTimeGroup |
conlastNTimePast ='for last 'INT lastNTimeGroup =LastNTimeGroup|
conDayTimeGroup ='for' dayTimeGroup=DayTimeGroup
;
MeasureList : names+=Measure ("and" names+=Measure)*;
Measure:ID+;
Dimension:ID+;
DimensionValue:
value=ID+
;
GroupList:
"by" (dimGroup=Dimension("by" timeGroup+=TimeGroup)? )|timeGroup+= TimeGroup
;
Group:
"by" ((dimGroup=Dimension("by" timeGroup+=TimeGroup)? )|timeGroup+= TimeGroup)
;
Transition:
'from' dateStart=Date 'to' dateEnd=Date
;
TimeGroup:
timeGroup=('day'|'week'|'month'|'quarter'|'year')
;
ThisTimeGroup:
thisTimeGroup=('year'|'month'|'week')
;
LastTimeGroup:
lastTimeGroup= ('year'|'quarter'|'month'|'week')
;
LastNTimeGroup:
lastTimeGroup= ('days'|'weeks'|'months')
;
DayTimeGroup:
dayTimeGroup =('today'|'yesterday')
;
Date:
d=Day m=Month y=Year ;
Day : INT ;
Month : 'Jan'|'Feb'|'Mar'|'Apr' ;
Year : INT ;
The following test fails .
@Test
def void testPlotMeasure1ForTime() {
val query ="plot profit for "
val result = parseHelper.parse(query)
var expected =Arrays.asList("profit")
Assert.assertEquals(result.greetings.key.getQKeyword,"plot")
Assert.assertEquals(expected,result.greetings.measure.names)
}
I get the error
expected:<[profit]> but was:<[profit or]>
I expect to have just profit in the measure list as "for" is a keyword in my grammar. The parser removes f and gives "profit or " as measure.
Am I missing something. please suggest.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.05684 seconds