Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
infosec-ecomp
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Putegnat Theo
infosec-ecomp
Commits
b23ce229
Commit
b23ce229
authored
2 years ago
by
Putegnat Theo
Browse files
Options
Downloads
Patches
Plain Diff
Grammaire OK
parent
0b180ec2
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
expr_grammar_action.g
+53
-45
53 additions, 45 deletions
expr_grammar_action.g
with
53 additions
and
45 deletions
expr_grammar_action.g
+
53
−
45
View file @
b23ce229
...
...
@@ -10,7 +10,7 @@ non-terminals ADD_EXPRS ADD_EXPR
non-terminals MUL_EXPRS MUL_EXPR
non-terminals CMP_EXPRS CMP_EXPR
non-terminals EQ_EXPRS EQ_EXPR
non-terminals BLOC
axiom S
{
...
...
@@ -22,72 +22,80 @@ axiom S
open Utils
(* TODO *)
let resolve_associativity term other =
let
rec
resolve_associativity term other =
(* TODO *)
term
match other with
| [] -> term
| (op,arg)::r -> resolve_associativity (Node (op,[term]@[arg])) r
(*List.fold_left (fun acc elt -> let tag ,tree = elt in Node(tag,[acc]@[tree])) term other *)
}
rules
S -> FUNDEFS SYM_EOF { Node (Tlistglobdef, []) }
FUNDEFS -> FUNDEF
S -> FUNDEFS SYM_EOF { Node (Tlistglobdef, $1) }
FUNDEFS -> FUNDEF FUNDEFS { $1 :: $2}
FUNDEFS -> {[]}
FUNDEF ->
SYM_
IDENTIFIER SYM_LPARENTHESIS LPARAMS SYM_RPARENTHESIS INSTR
FUNDEF -> IDENTIFIER SYM_LPARENTHESIS LPARAMS SYM_RPARENTHESIS INSTR
{Node (Tfundef, [$1;Node(Tfunargs,$3);$5])}
LPARAMS ->
SYM_
IDENTIFIER REST_PARAMS
LPARAMS ->
LPARAMS -> IDENTIFIER REST_PARAMS
{Node(Targ,[$1]) :: $2}
LPARAMS ->
{[]}
REST_PARAMS -> SYM_COMMA SYM_IDENTIFIER REST_PARAMS
REST_PARAMS ->
REST_PARAMS -> SYM_COMMA IDENTIFIER REST_PARAMS {Node (Targ,[$2]) :: $3}
REST_PARAMS -> {[]}
INSTR -> IDENTIFIER SYM_ASSIGN EXPR SYM_SEMICOLON {Node (Tassign, [Node (Tassignvar,[$1; $3])])}
INSTR -> SYM_IF SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS LINSTRS ELSE { Node (Tif, [$3;$5]@$6)}
INSTR-> SYM_WHILE SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS INSTR {Node (Twhile, [$3;$5])}
INSTR -> SYM_RETURN EXPR SYM_SEMICOLON {Node (Treturn, [$2])}
INSTR -> SYM_PRINT EXPR SYM_SEMICOLON {Node (Tprint, [$2])}
INSTR -> LINSTRS {$1}
INSTR -> SYM_IDENTIFIER SYM_ASSIGN EXPR SYM_SEMICOLON
INSTR -> SYM_IF SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS SYM_LBRACE INSTR SYM_RBRACE ELSE
INSTR-> SYM_WHILE SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS INSTR
INSTR -> SYM_RETURN EXPR SYM_SEMICOLON
INSTR -> SYM_PRINT EXPR SYM_SEMICOLON
INSTR -> BLOC
EXPR -> EQ_EXPR EQ_EXPRS { resolve_associativity $1 $2}
EXPR ->
CMP
_EXPR
CMP
_EXPRS
CMP_
EXPR ->
ADD
_EXPR
ADD
_EXPRS
{ resolve_associativity $1 $2}
CMP
_EXPR ->
ADD
_EXPR
ADD
_EXPRS
ADD
_EXPR ->
MUL
_EXPR
MUL
_EXPRS
{ resolve_associativity $1 $2}
ADD
_EXPR ->
MUL
_EXPR
MUL
_EXPRS
EQ
_EXPR ->
CMP
_EXPR
CMP
_EXPRS
{ resolve_associativity $1 $2}
MUL_EXPR -> FACTOR
MUL_EXPR -> FACTOR {$1}
MUL_EXPR -> SYM_MINUS FACTOR {Node (Tneg,[$2])}
FACTOR ->
SYM_
INTEGER
FACTOR ->
SYM_
IDENTIFIER
FACTOR -> SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS
FACTOR -> INTEGER
{$1}
FACTOR -> IDENTIFIER
{$1}
FACTOR -> SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS
{$2}
MUL_EXPRS -> SYM_ASTERISK MUL_EXPR MUL_EXPRS
MUL_EXPRS -> SYM_DIV MUL_EXPR MUL_EXPRS
MUL_EXPRS -> SYM_MOD MUL_EXPR MUL_EXPRS
MUL_EXPRS ->
MUL_EXPRS -> SYM_ASTERISK MUL_EXPR MUL_EXPRS
{ (Tmul,$2) :: $3 }
MUL_EXPRS -> SYM_DIV MUL_EXPR MUL_EXPRS
{ (Tdiv,$2) :: $3 }
MUL_EXPRS -> SYM_MOD MUL_EXPR MUL_EXPRS
{ (Tmod,$2) :: $3 }
MUL_EXPRS ->
{[]}
ADD_EXPRS -> SYM_PLUS ADD_EXPR ADD_EXPRS
ADD_EXPRS -> SYM_MINUS ADD_EXPR ADD_EXPRS
ADD_EXPRS->
ADD_EXPRS -> SYM_PLUS ADD_EXPR ADD_EXPRS
{ (Tadd,$2) :: $3 }
ADD_EXPRS -> SYM_MINUS ADD_EXPR ADD_EXPRS
{ (Tsub,$2) :: $3 }
ADD_EXPRS->
{[]}
CMP_EXPRS -> SYM_EQUALITY MUL_EXPR MUL_EXPRS
CMP_EXPRS -> SYM_NOTEQ MUL_EXPR MUL_EXPRS
CMP_EXPRS -> SYM_GEQ MUL_EXPR MUL_EXPRS
CMP_EXPRS -> SYM_GT MUL_EXPR MUL_EXPRS
CMP_EXPRS -> SYM_LT MUL_EXPR MUL_EXPRS
CMP_EXPRS -> SYM_LEQ MUL_EXPR MUL_EXPRS
EQ_EXPRS -> SYM_EQUALITY MUL_EXPR MUL_EXPRS { (Tceq,$2) :: $3 }
EQ_EXPRS -> SYM_NOTEQ MUL_EXPR MUL_EXPRS { (Tneg,$2) :: $3 }
EQ_EXPRS -> {[]}
EQ_EXPR -> SYM_INTEGER
EQ_EXPR -> SYM_IDENTIFIER
EQ_EXPR -> SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS
CMP_EXPRS -> SYM_GEQ MUL_EXPR MUL_EXPRS { (Tcge,$2) :: $3 }
CMP_EXPRS -> SYM_GT MUL_EXPR MUL_EXPRS { (Tcgt,$2) :: $3 }
CMP_EXPRS -> SYM_LT MUL_EXPR MUL_EXPRS { (Tclt,$2) :: $3 }
CMP_EXPRS -> SYM_LEQ MUL_EXPR MUL_EXPRS { (Tcle,$2) :: $3 }
CMP_EXPRS -> {[]}
EQ_EXPRS -> SYM_EQUALITY EQ_EXPR
INTEGER -> SYM_INTEGER {IntLeaf ($1)}
IDENTIFIER -> SYM_IDENTIFIER {StringLeaf ($1)}
ELSE -> SYM_ELSE
BLOC
ELSE ->
ELSE -> SYM_ELSE
LINSTRS {[$2]}
ELSE ->
{[]}
BLOC -> SYM_LBRACE INSTRS SYM_RBRACE
INSTRS -> INSTR INSTRS
LINSTRS -> SYM_LBRACE INSTRS SYM_RBRACE {Node (Tblock,$2)}
INSTRS -> INSTR INSTRS { $1 :: $2}
INSTRS -> {[]}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment