Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translation of the Xtext grammar to Langium #1

Open
garandria opened this issue Oct 11, 2023 · 0 comments
Open

Translation of the Xtext grammar to Langium #1

garandria opened this issue Oct 11, 2023 · 0 comments

Comments

@garandria
Copy link

Translation of your Xtext grammar to Langium using https://github.com/TypeFox/xtext2langium

grammar Mmlg
import 'Terminals'

entry MMLModel infers MMLModel:
    input=DataInput  algorithm=MLChoiceAlgorithm ? formula=RFormula ? validation=Validation ?  
;

DataInput infers DataInput:
    'datainput' filelocation=STRING  (parsingInstruction=CSVParsingConfiguration )?  
;

CSVParsingConfiguration infers CSVParsingConfiguration:
    "separator" sep=CSVSeparator   
;

type CSVSeparator = ',' | ";";
CSVSeparator returns CSVSeparator:
    CSVSeparator_COMMA | CSVSeparator_SEMI_COLON
;
CSVSeparator_COMMA returns string: ',' ;
CSVSeparator_SEMI_COLON returns string: ";" ;

MLChoiceAlgorithm infers MLChoiceAlgorithm:
    'mlframework' framework=FrameworkLang  'algorithm' algorithm=MLAlgorithm   
;

type FrameworkLang = "scikit-learn" | "R" | "Weka";
FrameworkLang returns FrameworkLang:
    FrameworkLang_SCIKIT | FrameworkLang_R | FrameworkLang_JavaWeka
;
FrameworkLang_SCIKIT returns string: "scikit-learn" ;
FrameworkLang_R returns string: "R" ;
FrameworkLang_JavaWeka returns string: "Weka" ;

MLAlgorithm infers MLAlgorithm:
    (SVM | DT | RandomForest | LogisticRegression )
;

SVM infers SVM:
    { infer SVM} 'SVM' ('gamma=' gamma=FLOAT  )? ('C=' C=FLOAT  )? ('kernel=' kernel=SVMKernel  )? ('classification' svmclassification=SVMClassification  )?  
;

type SVMKernel = 'linear' | 'polynomial' | 'radial';
SVMKernel returns SVMKernel:
    SVMKernel_linear | SVMKernel_poly | SVMKernel_radial
;
SVMKernel_linear returns string: 'linear' ;
SVMKernel_poly returns string: 'polynomial' ;
SVMKernel_radial returns string: 'radial' ;

type SVMClassification = "C-classification" | "nu-classification" | "one-classification";
SVMClassification returns SVMClassification:
    SVMClassification_cClass | SVMClassification_nuClass | SVMClassification_oneClass
;
SVMClassification_cClass returns string: "C-classification" ;
SVMClassification_nuClass returns string: "nu-classification" ;
SVMClassification_oneClass returns string: "one-classification" ;

DT infers DT:
    { infer DT} ('DT' | 'DecisionTree' )(max_depth=INT )?  
;

RandomForest infers RandomForest:
    { infer RandomForest} ('RandomForest' | 'RF' ) 
;

LogisticRegression infers LogisticRegression:
    { infer LogisticRegression} 'LogisticRegression'  
;

FLOAT returns string:
    INT '.' INT  
;

RFormula infers RFormula:
    ('formula' (predictive=FormulaItem  "~" )? predictors=XFormula  ) 
;

XFormula infers XFormula:
    (AllVariables | PredictorVariables )
;

AllVariables infers AllVariables:
    all='.'  
;

PredictorVariables infers PredictorVariables:
    (vars+=FormulaItem  ("+" vars+=FormulaItem  )* ) 
;

FormulaItem infers FormulaItem:
    column=INT  | colName=STRING  
;

Validation infers Validation:
    stratification=StratificationMethod  metric+=ValidationMetric +  
;

StratificationMethod infers StratificationMethod:
    CrossValidation | TrainingTest 
;

CrossValidation infers CrossValidation:
    'CrossValidation' '{' 'numRepetitionCross' ^number=INT  '}'  
;

TrainingTest infers TrainingTest:
    'TrainingTest' '{' 'pourcentageTraining' ^number=INT  '}'  
;

type ValidationMetric = 'recall' | 'precision' | 'F1';
ValidationMetric returns ValidationMetric:
    ValidationMetric_RECALL | ValidationMetric_PRECISION | ValidationMetric_F1
;
ValidationMetric_RECALL returns string: 'recall' ;
ValidationMetric_PRECISION returns string: 'precision' ;
ValidationMetric_F1 returns string: 'F1' ;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant