Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » TMF (Xtext) » Adding a prefix to Cross Reference field
Adding a prefix to Cross Reference field [message #629573] Tue, 28 September 2010 18:28 Go to next message
pozer is currently offline pozerFriend
Messages: 32
Registered: August 2010
Member
I have the following grammar. And then is the resulting language. In the section where it says filter is where I run into my problem. I need to prefix my cross referenced column with a word_. I can't seem to be able to do that without an error unless I leave a space in between. Is there anyway for me to do this? I can do it as a suffix with a . in between but not with the _.
grammar org.xtext.querydef.QueryDef with org.eclipse.xtext.common.Terminals

generate queryDef "http://www.xtext.org/querydef/QueryDef"

import "platform:/resource/org.xtext.DefTable/src-gen/org/xtext/example/deftable/DefTable.ecore" as deftable
import "http://www.eclipse.org/emf/2002/Ecore" as ecore

NameSpaces:{NameSpaces}
(namespace+=NameSpace)*;

NameSpace:
'Namespace' name=ID "{"
(query+=Query)*
"}";

Query:
'Query' namespace=[NameSpace] ("." name=QualifiedName)"{"
(


("[" 'Description:' description=MYSTRING"]")
("[" 'Set join_collapse_limit=' limit=INT"]")?
("[" 'Query:'queryName=[Query|QualifiedName]"]")?
("[" 'Filter:' filter+=Filter(',' filter+=Filter)*"]")?
("[" 'Return:' return+=ReturnElement (',' return+=ReturnElement)* "]")?
("[" 'From:' from=[deftable::Table]
joinexpression+=JoinExpression*
"]")?
("[" 'Where:' where+=Where(("And"|"Or")where+=Where)* "]")?
("[" 'Order:' order+=OrderExpression(',' order+=OrderExpression)*"]")?

"}");


Filter: column=([deftable::Column|QualifiedTableReference])(multi?='*')?|(distance+=Distance) (multi?='*')?|('MIN_'|'MAX_'|'AVERAGE_'|'RANGE_')column3=([deftable::Column|QualifiedTableReference])(multi?='*')?;
ReturnElement: column=[deftable::Column|QualifiedTableReference]('As' asname=ID)?|(column2=[deftable::Column|QualifiedTableReference])'.'('MIN'|'MAX'|'AVERAGE'|'Range') ('As' asname=ID)?;

//JOINS
JoinExpression:InnerJoinExpression|OuterJoinExpression;


enum Distance: radiussearchdistance='RadiusSearchDistance'|radiussearchradius='RadiusSearchRadius'|RadiusSearchDistanceFromLatLon='RadiusSearchDistanceFromLatLon'|RadiusSearchLatLon='RadiusSearchLatLon'|RadiusSearchPostalCode='RadiusSearchPostalCode'|RadiusSearchDistanceFromPostalCode='RadiusSearchDistanceFromPostalCode';
InnerJoinExpression:
(optional?='Optional')? 'Inner' 'Join' jointablename+=[deftable::Table]
"On" equals+=ColumnRefEqualsExpression
("And" equals+=ColumnRefEqualsExpression)*
(("And"|"Or") equals+=JoinAndExpression)*;


OuterJoinExpression:
(optional?='Optional')? 'Left' 'Join' jointablename=[deftable::Table]
"On" equals+=ColumnRefEqualsExpression
(("And"|"Or") equals+=ColumnEqualsExpression)*
(("And"|"Or") equals+=JoinAndExpression)*;

ColumnEqualsExpression:ColumnRefEqualsExpression|ColumnStringEqualsExpression;

ColumnRefEqualsExpression: left=[deftable::Column|QualifiedTableReference] '=' 
right=[deftable::Column|QualifiedTableReference];
ColumnStringEqualsExpression: left=[deftable::Column|QualifiedTableReference] '=' 
right=STRING;

JoinAndExpression:
IntCompareExpression|NullExpression|NotNullExpression|StringEqualsExpression;

Where: column=[deftable::Column|QualifiedTableReference] (expression=WhereExpression);


OrderExpression: column= [deftable::Column|QualifiedTableReference](direction+=Direction)?;
//the first element is the default one used, when
//nothing is specified
enum Direction: ascending="asc"|descending="desc";


WhereExpression: 
IntCompareExpression|NullExpression|NotNullExpression|StringEqualsExpression;

NullExpression: "is" "null"{NullExpression};
NotNullExpression: "is" "not" "null"{NotNullExpression};

IntCompareExpression: comparator=Comparator value=INT;
StringEqualsExpression: '=' value=STRING;
enum Comparator: equals = "="| greater=">"|less="<"| 
lessequals="<="|greaterequals= ">=";


QualifiedName hidden():ID('.'ID)*;
QualifiedTableReference hidden():ID'.'ID;
MYSTRING hidden(): (ID|WS|INT|STRING|'not'|','|ANY_OTHER|'null'|'.'|'Join'|'Inner'|'On'|'='|'or'|'keyword'|'Range'|'MIN'|'MAX'|'AVERAGE')*;

Query UsedCar.DrillDown.ByPriceRange
					{
					[Description: Price Range DrillDown based on DatasetGroup]
					[Filter: DatasetGroup.DatasetGroup*,VehicleBodyStyleGroup.VehicleBodyStyleGroupText, MAX_ VehicleUsed.VehicleUsedPriceRangeFloor,MIN_ VehicleUsed.VehicleUsedPriceRangeFloor]
					[Return: VehicleUsedYMMCache.VehicleUsedPriceRangeFloor]
					[From: DatasetGroup
					Inner Join DatasetGroupYearMakeModel On DatasetGroup.DatasetGroupId=DatasetGroupYearMakeModel.DatasetGroupId
					Inner Join VehicleUsedYMMCache On DatasetGroupYearMakeModel.VehicleYear=VehicleUsedYMMCache.VehicleYear And
													  DatasetGroupYearMakeModel.VehicleMakeId=VehicleUsedYMMCache.VehicleMakeId And
													  DatasetGroupYearMakeModel.VehicleModelId=VehicleUsedYMMCache.VehicleModelId
					Optional Inner Join VehicleBodyStyleGroup On VehicleUsedYMMCache.VehicleBodyStyleGroupId=VehicleBodyStyleGroup.VehicleBodyStyleGroupId
					]
					
					}	


Re: Adding a prefix to Cross Reference field [message #629599 is a reply to message #629573] Tue, 28 September 2010 20:21 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14716
Registered: July 2009
Senior Member
Hi,

The Problem is the ID terminal rule that lets the lexer recognize MAX_ABC
as one ID token and not as a MAX_ token followed by and ID token.
you may overwrite ID as follows:

terminal ID  		: '^'?('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')*;


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Adding a prefix to Cross Reference field [message #629601 is a reply to message #629573] Tue, 28 September 2010 20:30 Go to previous message
pozer is currently offline pozerFriend
Messages: 32
Registered: August 2010
Member
Thank you so much. That worked perfectly.
Previous Topic:Serializing optional values
Next Topic:how to avoid/ignore some code section
Goto Forum:
  


Current Time: Wed Sep 25 12:26:32 GMT 2024

Powered by FUDForum. Page generated in 0.03468 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top