Skip to content

Commit 6e36202

Browse files
committed
guard or があった場合、body も or に対応したものを書けるように変更
1 parent fb0ce78 commit 6e36202

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

src/compile/parser/LMNParser.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -466,15 +466,32 @@ private LinkedList<SrcRule> splitGuardOr(SrcRule rule) {
466466
LinkedList<SrcRule> result = new LinkedList<SrcRule>();
467467
if (rule.getGuard() != null) {
468468
LinkedList guard = rule.getGuard();
469+
LinkedList body = rule.getBody();
470+
boolean bodyOr = false;
471+
if(body.size() > 1){
472+
bodyOr = true;
473+
}
469474
if (guard.size() > 0) {
475+
if(bodyOr && body.size()!=guard.size()){
476+
error("Syntax error: different number of semicolon in guard and body");
477+
}
470478
if (guard.get(0) instanceof LinkedList) {
471479
for (int i = 0; i < guard.size(); i++) {
472-
SrcRule tmp =
480+
if(bodyOr){
481+
SrcRule tmp =
473482
new SrcRule(
474-
rule.name, rule.head, (LinkedList) guard.get(i), rule.body, rule.lineno);
475-
tmp.guard = (LinkedList) guard.get(i);
476-
tmp.setText();
477-
result.add(tmp);
483+
rule.name, rule.head, (LinkedList) guard.get(i), (LinkedList)body.get(i), rule.lineno);
484+
tmp.guard = (LinkedList) guard.get(i);
485+
tmp.setText();
486+
result.add(tmp);
487+
}else{
488+
SrcRule tmp =
489+
new SrcRule(
490+
rule.name, rule.head, (LinkedList) guard.get(i), (LinkedList)body.get(0), rule.lineno);
491+
tmp.guard = (LinkedList) guard.get(i);
492+
tmp.setText();
493+
result.add(tmp);
494+
}
478495
}
479496
}
480497
} else {

0 commit comments

Comments
 (0)