Skip to content

Commit 48b1d71

Browse files
MatWisetautschnig
authored andcommitted
Add jumps to STL parser
Includes parser support for: - JU (unconditional jump) - JC (conditional jump) - JCN (inverted conditional jump)
1 parent 6a3db2f commit 48b1d71

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

src/statement-list/parser.y

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ extern char *yystatement_listtext;
128128
%token TOK_ACCU_DINT_GTE ">=D"
129129
%token TOK_ACCU_DINT_LTE "<=D"
130130
%token TOK_ASSIGNMENT ":="
131+
%token TOK_JUMP_UNCONDITIONAL "JU"
132+
%token TOK_JUMP_CONDITIONAL "JC"
133+
%token TOK_JUMP_CONDITIONAL_NOT "JCN"
131134

132135
/*** Value tokens ***/
133136
%token TOK_INT_LITERAL
@@ -997,7 +1000,22 @@ IL_Simple_Operator:
9971000
{
9981001
$$ = $1;
9991002
parser_stack($$).id(ID_statement_list_not);
1000-
}
1003+
}
1004+
| TOK_JUMP_UNCONDITIONAL
1005+
{
1006+
$$ = $1;
1007+
parser_stack($$).id(ID_statement_list_jump_unconditional);
1008+
}
1009+
| TOK_JUMP_CONDITIONAL
1010+
{
1011+
$$ = $1;
1012+
parser_stack($$).id(ID_statement_list_jump_conditional);
1013+
}
1014+
| TOK_JUMP_CONDITIONAL_NOT
1015+
{
1016+
$$ = $1;
1017+
parser_stack($$).id(ID_statement_list_jump_conditional_not);
1018+
}
10011019
;
10021020

10031021
IL_Operand:

src/statement-list/scanner.l

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ void statement_list_scanner_init()
165165
\<D { loc(); return TOK_ACCU_DINT_LT; }
166166
\>=D { loc(); return TOK_ACCU_DINT_GTE; }
167167
\<=D { loc(); return TOK_ACCU_DINT_LTE; }
168+
JU { loc(); return TOK_JUMP_UNCONDITIONAL; }
169+
JC { loc(); return TOK_JUMP_CONDITIONAL; }
170+
JCN { loc(); return TOK_JUMP_CONDITIONAL_NOT; }
168171

169172
(10#)?[\+-]?[0-9]+ {
170173
newstack(yystatement_listlval);

src/util/irep_ids.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,9 @@ IREP_ID_ONE(statement_list_clr_rlo)
839839
IREP_ID_ONE(statement_list_set)
840840
IREP_ID_ONE(statement_list_reset)
841841
IREP_ID_ONE(statement_list_not)
842+
IREP_ID_ONE(statement_list_jump_unconditional)
843+
IREP_ID_ONE(statement_list_jump_conditional)
844+
IREP_ID_ONE(statement_list_jump_conditional_not)
842845
IREP_ID_ONE(statement_list_instruction)
843846
IREP_ID_ONE(statement_list_instructions)
844847
IREP_ID_ONE(max)

0 commit comments

Comments
 (0)