All Downloads are FREE. Search and download functionalities are using the official Maven repository.

moss.4.3.1.source-code.postfix.grammar Maven / Gradle / Ivy

The newest version!
Package prerna.sablecc;

Helpers
 all = [0 .. 0xFFFF];
 alpha = [['a' .. 'z'] + ['A' .. 'Z']];
 letter_s = ['a' .. 'z'];
 letter_b = ['A' .. 'Z'];
 digit = ['0' .. '9'];
 
 underscore = '_';
 hdot = '.';
 quote = ('"' | ''');
 not_quote = [all - ['"' + ''']];
 
 url_unescaped_chars = ('-' | '_' | '.' | '!' | '~' | '*' | ''' | '(' | ')' | '%');
 other_unescaped_chars = (';' | ',' | '/' | '?' | ':' | '@' | '&' | '=' | '+' | '$' | '#' | '\' | '"' | '{' | '}' | ' ');
 encoded_values = (alpha | digit | url_unescaped_chars | other_unescaped_chars);
 
 panelprefix =  'panel' ( '[' digit ']' )?;
 panelcommentprefix = panelprefix '.comment' ( '[' digit+ ']' )?;
 
 startjson = '';
 endjson = '';
 startquery = '';
 endquery = '';
 starthtml = '';
 endhtml = '';
 code = '';
 com_prefix = '';

Tokens
 number = ['0' .. '9']+;
 boolean = ('TRUE' | 'FALSE' | 'true' | 'false');
 null = ('null' | 'NULL');
 id = (letter_s | letter_b | digit | underscore)*;
 dot = '.';
 semicolon = ';';
 colon = ':';
 plus = '+';
 minus = '-';
 mult = '*';
 comma = ',';
 div = '/';
 col = 'col';
 comparator = ('>' | '<' | '<=' | '>=' | '!=' | '?like');
 viz_type = ('x=' | 'y=' | 'z=' | 'size=' | 'color=' | 'tooltip=' | 'cluster=' | 'latitude=' | 'longitude=' | 'start=' | 'end=' | 'heat=' | 'dimension=' | 'label=' | 'value=' | 'series=' | 'group=' | 'x_category=' | 'y_category=' | 'z_category=');
 log_operator = ( '||' | '&&' );
 equal = '=';
 coladd = 'col.add';
 api = ('api:'|'call:');
 math = ('math.' | 'm.');
 coljoin = 'col.join';
 colprefix = 'c:';
 table_prefix = 't:';
 valprefix = 'v:';
 colremove = 'col.remove';
 colfilter = 'col.filter';
 colunfilter = 'col.unfilter';
 colfiltermodel = 'col.filterModel';
 colimport = 'col.import';
 //('removeColumn:' | 'rm:' | 'del:' | 'rem:');
 colset = 'col.set';
 //('setColumn:' | 'sc:' | 'set:');
 colpivot = 'col.pivot';
 colfocus = 'col.focus';
 colalias = 'col.alias';
 colrename = 'col.rename';
 colsplit = 'col.split';
 //('pivotColumn:' | 'pivot:' | 'pc:');
 collink = 'link:';
 show_hide = ('on' | 'off');
 mod = '%';
 l_par = '(';
 r_par = ')';
 l_bracket = '[';
 r_bracket = ']';
 l_curl_bracket = '{';
 r_curl_bracket = '}';
 group = 'group:';
 blank = (' ' | 13 | 10)+;
 space = (' ' | 13)+;
 newline = '\r'? '\n';
 java = 'j:';
 python = 'p:';
 proc = 'm:';
 this = 'this';
 import_type = ('flat' | 'tree');
 rel_type = ('inner.join' | 'outer.join' | 'right.outer.join' | 'left.outer.join' | 'cross.join' | 'self.join' ); 
 dataimporttoken = 'data.import';
 dataremovetoken = 'data.remove';
 dataopentoken = 'data.open';
 dataoutputtoken = 'data.output';
 datacleartoken = 'data.clear';
 dataquerytoken = 'data.query';
 datamodeltoken = 'data.model';
 dataclearcachetoken = 'data.clearcache';
 datausecachetoken = 'data.usecache';
 literal = (letter_s | letter_b | digit | underscore)*;// | special)*;
 help_token = 'info.help';
 
 panelviz =  panelprefix '.viz';
 panelclone = panelprefix '.clone';
 panelclose = panelprefix '.close';
 panelhandle = panelprefix '.handle';
 
 dataframe = 'data.frame';
 dataframeheader = 'data.frame.getHeaders';
 dataframeduplicates = 'data.frame.hasDuplicates';
 dataframechangetype = 'data.frame.changeType';
 dataframesetedgehash = 'data.frame.setEdgeHash';
 panelcommentremove = panelcommentprefix '.remove';
 panelcommentedit = panelcommentprefix '.edit';
 panelcommentadd = panelcommentprefix '.add';
 panellookandfeel = panelprefix '.lookandfeel';
 paneltools = panelprefix '.tools';
 panelconfig = panelprefix '.config';
 output_token = panelprefix '.create';
 userinput = 'user.input';
 data_join = 'data.join';
 data_unjoin = 'data.unjoin';
 datatype_token = 'data.type';
 dataconnect_token = 'data.connect';
 datanetworkconnect_token = 'network.connect';
 datanetworkdisconnect_token = 'network.disconnect';
 dataconnectdb_token = 'data.connectdb';
 datainsightid_token = 'data.getInsightId';
 
 databaselist_token = 'database.list';
 databaseconcepts_token = 'database.concepts';
 databaseconnectedconcepts_token = 'database.getConnectedConcepts';
 databaseconceptproperties_token = 'database.concept.properties';
 databasemetamodel_token = 'database.metamodel';
 
 dashboardconfig = 'dashboard.config';
 //dashboard_join_token = 'dashboard.join';
 //dashboard_rem_token = 'dashboard.removeInsight'
 dashboard_add_token = 'dashboard.add';
 //dashboard_unjoin_token = 'dashboard.unjoin'
 wherestr = 'where=' ;
 metatag = 'meta.';

 word = quote not_quote* quote;
 hword = com_prefix encoded_values* com_prefix;
 jsonblock = startjson encoded_values* endjson;
 codeblock = code all* code;
 queryblock = startquery all* endquery;
 file_text = '' all* '';
 html_text = quote starthtml all* endhtml quote;
 
Ignored Tokens
 blank;

Productions
configuration = script*;

script = {colop} metatag? colop  semicolon // column operations
		 | {varop} metatag? varop semicolon// row operations or setting up data
		 | {j_op} metatag? j_op semicolon// java operation
		 | {expr} metatag? expr semicolon
		 //| statop
		 | {help} metatag? help semicolon
		 | {panelop} metatag? panelop semicolon
		 | metatag? newline
		 | {dataop} metatag? dataop semicolon
		 | {dashboardop} metatag? dashboardop semicolon		 
		 | {databaseop} metatag? databaseop semicolon
		 ;

colop = // colOp is usually of the form of joinColumn / addColumn / removeColumn / setColumn
		{add_column} add_column 
		| {remcol} rem_column 
		| {setcol} set_column
		| {pivotcol} pivot_column
		| {filtercol} filter_column
		| {filtermodel} filter_model
		| {focuscol} focus_column
		| {unfocus} unfocus
		| {import} import_column
		| {alias} alias_column
		| {import_data} import_data
		| {unfiltercol} unfilter_column
		| {remove_data} remove_data
		| {data_frame} data_frame
		| {data_frame_header} data_frame_header
		| {data_frame_change_types} data_frame_change_types
		| {data_frame_set_edge_hash} data_frame_set_edge_hash
		| {data_frame_duplicates} data_frame_duplicates
		| {open_data} open_data
		| {renamecol} rename_column
		| {splitcol} split_column
		| {dashboard_join} dashboard_join
		| {dashboard_unjoin} dashboard_unjoin
		| {query_data} query_data
		| {clear_cache} clear_cache
		| {use_cache} use_cache
		| {data_insightid} data_insightid
		;

panelop = // panelop is usually of the form of viz.change, viz.tools, viz.color
		{panel_viz} panel_viz 
		| {panel_comment} panel_comment
		| {panel_comment_remove} panel_comment_remove
		| {panel_comment_edit} panel_comment_edit
		| {panel_look_and_feel} panel_look_and_feel
		| {panel_tools} panel_tools
		| {panel_config} panel_config
		| {panel_clone} panel_clone
		| {panel_close} panel_close
		| {output_insight} output_insight
		| {panel_handle} panel_handle
		;
		
dataop = // dataop is usually of the form of data.frame, etc.
		{datatype} datatype
		| {dataconnect} dataconnect
		| {dataconnectdb} dataconnectdb
		| {datanetworkconnect} datanetworkconnect
		| {datanetworkdisconnect} datanetworkdisconnect
		| {output_data} output_data
		| {data_model} data_model
		| {clear_data} clear_data
		;

dashboardop = // dashboardop is usually of the form dashboard.join, dashboard.add, dashboard.remove, etc.
		{dashboard_config} dashboard_config
		| {dashboard_add} dashboard_add
		;
	//	{dashboard_join} dashboard_join
		//| {dashboard_rem}
		//| {dashboard_unjoin}
		//;
		
databaseop = // databaseop is usually of the form database.list, database.concepts, etc.
		{database_list} database_list
		| {database_concepts} database_concepts
		| {database_connected_concepts} database_connected_concepts
		| {database_metamodel} database_metamodel
		| {database_concept_properties} database_concept_properties
		;

		
panel_viz = // e.g. panel.viz(bar, [c:Title, c:Budget]); panelviz( vizType, ordered headers );
		panelviz l_par [layout]:id [c1]:comma [datatablealign]:flex_selector_row [c2]:comma? [uioptions]:map_obj? r_par
		;
		
panel_comment = // e.g. panel.comment.add("this looks super important", group0, coordinate, (50, 16));
		panelcommentadd l_par [text]:hword [c1]:comma [type]:id [c2]:comma [location]:map_obj [c3]:comma [group]:id r_par
		;
		
panel_comment_edit = // e.g. panel.comment.edit("this looks super important", group0, coordinate, (50, 16));
		panelcommentedit l_par [text]:hword [c1]:comma [type]:id [c2]:comma [location]:map_obj [c3]:comma [group]:id r_par
		;
		
panel_comment_remove = // e.g. panel.comment[0].remove();
		panelcommentremove l_par r_par
		;
		
panel_look_and_feel = // e.g. panel.lookandfeel({'color':'red'});
		panellookandfeel l_par [map]:map_obj r_par
		;
		
panel_tools = // e.g. panel.tools({'flippedaxis':'true'});
		paneltools l_par [map]:map_obj comma? [state]:word_or_num? r_par
		;
		
panel_config = // e.g. panel.config({'positon':'leftside'});
		panelconfig l_par [json]:jsonblock r_par
		;
		
panel_clone = // e.g. panel.clone(1);
		panelclone l_par [newid]:number r_par
		;
		
panel_close = // e.g. panel.close();
		panelclose l_par r_par
		;
		
panel_handle = // e.g. panel.handle(['console', 'open']);
		panelhandle l_par [handlekeys]: csv_row? r_par
		;

data_insightid = //e.g. data.getInsightId();
		datainsightid_token l_par r_par
		;
		
data_frame = // e.g. panel.setBuilder('graph');
		dataframe l_par [builder]:word_or_num r_par
		;
data_frame_header = // e.g. data.frame.getHeaders();
		dataframeheader l_par map_obj? r_par
		;
data_frame_duplicates = // e.g. data.frame.hasDuplicates(c:Col,); 
		dataframeduplicates l_par col_csv r_par
		;

data_frame_change_types = // e.g. data.frame.changeType(c:Col, NUMBER);
		dataframechangetype l_par col_def comma word_or_num r_par
		;

data_frame_set_edge_hash = // e.g. data.frame.setEdgeHash("")
		dataframesetedgehash l_par word_or_num r_par
		;
			
dashboard_config = //e.g. dashboard.config(*configuration string*);
		dashboardconfig l_par [json]:jsonblock r_par
		;
			
add_column = // follows the pattern of addColumn(columnName and optionally the expression) addColumn(c:NewCol, 'expression', [c:col1, c:col2]);
		coladd l_par [newcol]:col_def comma [expr]:expr r_par 
		;

rem_column = // follows the pattern of addColumn(columnName and optionally the expression) removeColumn(c:colToRemove);
		colremove l_par [newcol]:col_def col_group* r_par 
		;

set_column = // follows the pattern of addColumn(columnName and optionally the expression) addColumn(c:NewCol, 'expression');
		colset l_par [newcol]:col_def comma [expr]:expr r_par 
		;

pivot_column = // grouping based on multiple columns
		colpivot l_par [firstcol]:col_def col_group+ r_par;

filter_column = // filter column using an expression
		colfilter l_par [where]:where_clause r_par;
		
filter_model = // col.filterModel(c:col, word, {limit:#, offset:0})
		colfiltermodel l_par col_def [com1]:comma? word_or_num? [parameters]:options_map? r_par
		;
		
unfilter_column = //unfilter column using col_def
		colunfilter l_par col_def r_par;
		
focus_column = // takes all the other columns and focuses on only these columns
		colfocus l_par col_def col_group* show_hide r_par
		;
		
unfocus = // you will specify it as col.focus('off');
		colfocus l_par show_hide r_par
		;

import_column = // importing data - col.import(tree | flat, [c:col1, c:col2, c:col3], [ [1,2,3] [a,b,c] ] - this is a flat
		colimport [lp1]:l_par [cols]:col_csv [relations]:relation_clause? [rp2]:r_par dot [data]:csv_table 
		;

alias_column = // sets the column aliases
		colalias [lp1]:l_par [cols]:col_csv [where]:where_statement [rp2]:r_par;

rename_column = //renames a column
		colrename [lp1]:l_par [oldcol]:col_def comma [newcol]:col_def [rp1]:r_par;

split_column = //splits a column based on a delimiter
		colsplit [lp1]:l_par [col]:col_def comma [delimiter]:word_or_num [rp1]:r_par;
		
import_data = // imports from api query commands and other scripts
		dataimporttoken [lp1]:l_par [import]:import_block [joins]:relation_clause? [comma1]:comma? [properties]:map_obj? [rp2]:r_par;

query_data = // imports from api query commands and other scripts
		dataquerytoken [lp1]:l_par [import]:import_block [joins]:relation_clause? [rp2]:r_par;
		
open_data = //opens insight given an engine and id, e.g. "data.open("MovieDB", "3");
		dataopentoken [lp]:l_par [engine]:word_or_num [comma]:comma [engine_id]:word_or_num [rp]: r_par;
		
clear_cache = //deletes the cache for an insight, db, or all cache, e.g. "data.clearcache("MovieDB", "3")"
		dataclearcachetoken [lp]:l_par [engine]:word_or_num? [engine_id]:csv_group? [rp]: r_par;

use_cache = //sets the cache setting, true to use cache, false otherwise
		datausecachetoken [lp]:l_par [cache_setting]:boolean [rp]: r_par;
	
output_data = //opens insight given an engine and id and replaces that insight, e.g. "data.output("MovieDB", "3");
		dataoutputtoken [lp]:l_par [engine]:word_or_num [comma]:comma [engine_id]:word_or_num [rp]: r_par;

clear_data = //clears the data from the insight
		datacleartoken [lp]:l_par [rp]:r_par;
					
import_block = {api} api_block | {pasted_data} pasted_data_block | {raw_api} raw_api_block; 

pasted_data_block = l_par pasted_data comma [delimitier]:word_or_num r_par;

pasted_data = file_text; 

remove_data = // imports from api query commands and other scripts and deletes that data from the table
		dataremovetoken l_par api_block relation_clause? r_par; 

decimal = [whole]:number dot? [fraction]:number?;
		
expr_group = [comma]:comma [expr]:expr;		

output_insight = output_token l_par [engine_name]:id comma [insight_id]:id r_par;

api_block = api [engine_name]:id dot [insight]:id l_par [selectors]:col_csv? [where]:where_statement? [relations]:relation_clause? comma? [properties]:map_obj? r_par; // the insight can also be the method
// query format
// api:Tap_Core.Query:([Selectors], [Filters], [relations])
// relations
// selector sibling selector comes from the same table
// selector equal_or_compare selector

raw_api_block = api [engine_name]:id dot [insight]:id l_par queryblock [comma1]:comma? [properties]:map_obj? r_par;

selector = l_bracket col_csv r_bracket;

// where column clause
col_where = col_def equal_or_compare term;

col_def_or_csv_row = {col_def} col_def | {csv} csv_row;

col_where_group = comma col_where;

//where_clause = comma? l_par col_where col_where_group* r_par; // , (
where_clause = col_where col_where_group*;

where_statement = comma? l_par where_clause r_par;
// relations
relation_def = l_bracket [from]:col_def [com1]:comma rel_type [com2]:comma [to]:col_def r_bracket;

relation_group = comma relation_def;

relation_clause = comma l_par relation_def relation_group* r_par;

if_block = l_par equal_or_compare comma term r_par;

col_group = comma col_def;

keyvalue = [word1]:word_or_num colon [word2]:word_or_num_or_nested_obj;

keyvalue_group = comma keyvalue;

map_obj = l_curl_bracket keyvalue? keyvalue_group* r_curl_bracket;

group_by = l_par col_def col_group* r_par; // this is to be included in various math calculations (Studio, Genre) - this is equivalent of saving pivot on this

col_def = colprefix [colname]:id;

table_def = table_prefix [cardinality]:number; // if you want to add runtime formulas as you take the table in - instead of waiting

var_def = valprefix [valname]:id;

varop = // variable operation usually takes the form of a given variable taking ID = some stuff
		 var_def equal input_or_expr;
		
//num_csv = l_bracket decimal num_csv_group+ r_bracket; 		

csv_row = l_bracket word_or_num csv_group* r_bracket; 		// [1,3]

map_obj_row = l_bracket word_or_num_or_nested_obj word_or_num_or_nested_obj_group* r_bracket;

word_or_num_or_nested_obj_group = comma word_or_num_or_nested_obj;

easy_row = word_or_num easy_group+ newline;

easy_group = comma word_or_num;

csv_table = l_bracket csv_row+ r_bracket; //[[1,3][2,4][5,6]]

col_csv = l_bracket col_def col_group* r_bracket; // this is typically of the form [c:col1, c:col2, c:col3]

col_table = l_bracket col_csv+ r_bracket; //[[c:col1, c:col2][c:col3, c:col4][c:col5, c:col6]]

word_or_num = {empty} null | {num} decimal | {alpha} word | {expr} [formula]:formula | {variable} var_def ; // I need some way putting an expression here

word_or_num_or_nested_obj = {word_or_num} word_or_num | {nested_map} map_obj | {nested_csv} map_obj_row | {html} html_text ;

flex_selector_row = l_bracket selector_term? selector_group* r_bracket;

selector_term = viz_type? term;

selector_group = comma selector_term?;

formula = l_par expr r_par;
		
csv_group = comma [csv]:word_or_num; // , 3

expr_row = l_bracket [expr]:expr expr_group* r_bracket;

dashboard_join =  // data.join("insight1", "insight2", c:Title, c:Movie_Title, inner.join);
	data_join l_par [insightlist]:join_param_list [com1]:comma [joincolslist]:col_table [com2]:comma? [rel]:rel_type? r_par;

dashboard_add = //dashboard.add("insight1", "insight2");
	dashboard_add_token l_par [insightlist]: join_param_list r_par;

dashboard_unjoin = //data.unjoin(["insight1", "insight2"])
	data_unjoin l_par [insightlist]:join_param_list r_par;
	
join_param = {open_data} open_data | {insightid} word | {variable} var_def;

join_group = comma join_param;

join_param_list = l_bracket join_param join_group* r_bracket;

j_op = // this of the pattern j:{hola, hello etc.. }
	java codeblock;
	
help = help_token;

datatype = datatype_token;

dataconnect = dataconnect_token l_par word_or_num r_par;

datanetworkconnect = datanetworkconnect_token l_par [tablename]:word_or_num? r_par;

datanetworkdisconnect = datanetworkdisconnect_token l_par r_par;

dataconnectdb = dataconnectdb_token l_par word_or_num r_par;

data_model = // e.g. data.model(*default widget json*);
		datamodeltoken l_par [json]:jsonblock r_par
		;

equal_or_compare = {comparator} comparator | {equal} equal;

user_input = userinput l_par [options]:term comma [selections]:word_or_num r_par;

input_or_expr = {expr} expr | {input} user_input | {open_data} open_data; //script;

condition = l_par [left]:term equal_or_compare [right]:term r_par;

condition_group = log_operator condition;

condition_block = l_par condition condition_group* r_par;
		
 expr =
  {term} term
  | {plus} [left]:term plus [right]:expr
  | {minus} [left]:term minus [right]:expr
  | {mult} [left]:term mult [right]:expr 
  | {div} [left]:term div [right]:expr 
  | {mod} [left]:term mod [right]:expr
  | {e_expr} extended_expr
  | {condition_expr} condition_block
  //|{math_fun} math_fun // I need to still resolve other mathematical functions
  ;
 
 math_fun = proc id l_par [expr]:expr_row comma? [group]:col_csv? [parameters]:options_map? r_par; // m.Sum([1 + c:Activity], /*groupBy*/(c:studio, c:genre));
 
 options_map = comma map_obj; 
 
 extended_expr = l_par [expr]:expr comma? [group]:col_csv r_par; // I have no idea why I need this.. but !!
 
 term =
  {number} decimal |
  {formula} formula
  | {var} [var]:var_def
  | {col} [col]:col_def
  | {api} api_block
  | {raw_api} raw_api_block
  | {tab} [tab]:table_def
  | {csv} csv_row
  | {alpha} word
  | {math_fun} math_fun
  | {codeblock} codeblock
  //| {input} user_input
  ;
   
//////////////////////////////////////////
//////////////////////////////////////////
////////// DATABASE OPERATIONS ///////////

// get list of databases
database_list = databaselist_token;

// get list of concepts within database
database_concepts = databaseconcepts_token l_par [engine_name]:id r_par;

// get connected concepts
database_connected_concepts = databaseconnectedconcepts_token l_par [concept_type]:id r_par; 

// get all the properties for a concept across all engines
database_concept_properties = databaseconceptproperties_token l_par [concept_name]:id comma? [engine_name]:id? r_par;

// get the engine metamodel
database_metamodel = databasemetamodel_token l_par [engine_name]:id r_par;





© 2015 - 2025 Weber Informatics LLC | Privacy Policy