
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