Changeset e86735ba
- Timestamp:
- Apr 18, 2025, 4:15:39 PM (4 weeks ago)
- Branches:
- master
- Children:
- 0eacfd4
- Parents:
- 9dd1dd6
- Location:
- src/Parser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/lex.ll
r9dd1dd6 re86735ba 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Mon Mar 3 09:21:33202513 * Update Count : 88 012 * Last Modified On : Fri Apr 18 15:23:40 2025 13 * Update Count : 884 14 14 */ 15 15 … … 474 474 475 475 "@=" { NAMEDOP_RETURN(ATassign); } // CFA 476 "+~" { NAMEDOP_RETURN(ErangeUp); } // CFA 477 "~=" { NAMEDOP_RETURN(ErangeUpEq); } // CFA 478 "+~=" { NAMEDOP_RETURN(ErangeUpEq); } // CFA 479 "-~" { NAMEDOP_RETURN(ErangeDown); } // CFA 480 "-~=" { NAMEDOP_RETURN(ErangeDownEq); } // CFA 476 "+~" { NAMEDOP_RETURN(ErangeUpLt); } // CFA 477 "~=" { NAMEDOP_RETURN(ErangeUpLe); } // CFA 478 "+~=" { NAMEDOP_RETURN(ErangeUpLe); } // CFA 479 "-~" { NAMEDOP_RETURN(ErangeDownGt); } // CFA 480 "-~=" { NAMEDOP_RETURN(ErangeDownGe); } // CFA 481 "~==" { NAMEDOP_RETURN(ErangeEq); } // CFA 482 "~!=" { NAMEDOP_RETURN(ErangeNe); } // CFA 483 "-~==" { NAMEDOP_RETURN(ErangeDownEq); } // CFA 484 "-~!=" { NAMEDOP_RETURN(ErangeDownNe); } // CFA 481 485 482 486 /* CFA, operator identifier */ -
src/Parser/parser.yy
r9dd1dd6 re86735ba 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Apr 8 18:36:20202513 // Update Count : 72 5912 // Last Modified On : Fri Apr 18 15:23:42 2025 13 // Update Count : 7283 14 14 // 15 15 … … 229 229 #define NEW_ZERO new ExpressionNode( build_constantInteger( yylloc, *new string( "0" ) ) ) 230 230 #define NEW_ONE new ExpressionNode( build_constantInteger( yylloc, *new string( "1" ) ) ) 231 #define UPDOWN( compop, left, right ) (compop == OperKinds::LThan || compop == OperKinds::LEThan ? left : right)231 #define UPDOWN( compop, left, right ) (compop == OperKinds::LThan || compop == OperKinds::LEThan || compop == OperKinds::Neq ? left : right) 232 232 #define MISSING_ANON_FIELD "illegal syntax, missing loop fields with an anonymous loop index is meaningless as loop index is unavailable in loop body." 233 233 #define MISSING_LOW "illegal syntax, missing low value for ascanding range so index is uninitialized." … … 242 242 if ( inc ) inc = new ExpressionNode( build_binary_val( location, 243 243 // choose += or -= for upto/downto 244 compop == OperKinds::LThan || compop == OperKinds::LEThan ? OperKinds::PlusAssn : OperKinds::MinusAssn,244 UPDOWN( compop, OperKinds::PlusAssn, OperKinds::MinusAssn ), 245 245 new ExpressionNode( build_varref( location, new string( *init->name ) ) ), 246 246 inc ) ); … … 418 418 %token ANDassign ERassign ORassign // &= ^= |= 419 419 420 %token ErangeUp ErangeUpEq ErangeDown ErangeDownEq // +~ +~=/~= -~ -~= 420 %token ErangeUpLt ErangeUpLe ErangeEq ErangeNe // +~ +~=/~= ~== ~!= 421 %token ErangeDownGt ErangeDownGe ErangeDownEq ErangeDownNe // -~ -~= -~== -~!= 421 422 %token ATassign // @= 422 423 … … 442 443 %type<ifctrl> conditional_declaration 443 444 %type<forctrl> for_control_expression for_control_expression_list 444 %type<oper> upupeq updown updowneq downupdowneq445 %type<oper> upupeq updown updownS updownEq 445 446 %type<expr> subrange 446 447 %type<decl> asm_name_opt … … 1485 1486 | comma_expression // CFA, anonymous loop-index 1486 1487 { $$ = forCtrl( yylloc, $1, new string( DeclarationNode::anonymous.newName() ), NEW_ZERO, OperKinds::LThan, $1->clone(), NEW_ONE ); } 1487 | downupdowneq comma_expression// CFA, anonymous loop-index1488 | updown comma_expression // CFA, anonymous loop-index 1488 1489 { $$ = forCtrl( yylloc, $2, new string( DeclarationNode::anonymous.newName() ), UPDOWN( $1, NEW_ZERO, $2->clone() ), $1, UPDOWN( $1, $2->clone(), NEW_ZERO ), NEW_ONE ); } 1489 1490 1490 | comma_expression updown eq comma_expression// CFA, anonymous loop-index1491 | comma_expression updownS comma_expression // CFA, anonymous loop-index 1491 1492 { $$ = forCtrl( yylloc, $1, new string( DeclarationNode::anonymous.newName() ), UPDOWN( $2, $1->clone(), $3 ), $2, UPDOWN( $2, $3->clone(), $1->clone() ), NEW_ONE ); } 1492 | '@' updown eqcomma_expression // CFA, anonymous loop-index1493 | '@' updownS comma_expression // CFA, anonymous loop-index 1493 1494 { 1494 1495 if ( $2 == OperKinds::LThan || $2 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1495 1496 else $$ = forCtrl( yylloc, $3, new string( DeclarationNode::anonymous.newName() ), $3->clone(), $2, nullptr, NEW_ONE ); 1496 1497 } 1497 | comma_expression updown eq'@' // CFA, anonymous loop-index1498 | comma_expression updownS '@' // CFA, anonymous loop-index 1498 1499 { 1499 1500 if ( $2 == OperKinds::LThan || $2 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_ANON_FIELD ); $$ = nullptr; } 1500 1501 else { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } 1501 1502 } 1502 | comma_expression updowneq comma_expression '~' comma_expression // CFA, anonymous loop-index 1503 1504 | comma_expression updownS comma_expression '~' comma_expression // CFA, anonymous loop-index 1503 1505 { $$ = forCtrl( yylloc, $1, new string( DeclarationNode::anonymous.newName() ), UPDOWN( $2, $1->clone(), $3 ), $2, UPDOWN( $2, $3->clone(), $1->clone() ), $5 ); } 1504 | '@' updown eqcomma_expression '~' comma_expression // CFA, anonymous loop-index1506 | '@' updownS comma_expression '~' comma_expression // CFA, anonymous loop-index 1505 1507 { 1506 1508 if ( $2 == OperKinds::LThan || $2 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1507 1509 else $$ = forCtrl( yylloc, $3, new string( DeclarationNode::anonymous.newName() ), $3->clone(), $2, nullptr, $5 ); 1508 1510 } 1509 | comma_expression updown eq'@' '~' comma_expression // CFA, anonymous loop-index1511 | comma_expression updownS '@' '~' comma_expression // CFA, anonymous loop-index 1510 1512 { 1511 1513 if ( $2 == OperKinds::LThan || $2 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_ANON_FIELD ); $$ = nullptr; } 1512 1514 else { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } 1513 1515 } 1514 | comma_expression updown eqcomma_expression '~' '@' // CFA, invalid syntax rule1516 | comma_expression updownS comma_expression '~' '@' // CFA, invalid syntax rule 1515 1517 { SemanticError( yylloc, MISSING_ANON_FIELD ); $$ = nullptr; } 1516 | '@' updown eq'@' // CFA, invalid syntax rule1518 | '@' updownS '@' // CFA, invalid syntax rule 1517 1519 { SemanticError( yylloc, MISSING_ANON_FIELD ); $$ = nullptr; } 1518 | '@' updown eqcomma_expression '~' '@' // CFA, invalid syntax rule1520 | '@' updownS comma_expression '~' '@' // CFA, invalid syntax rule 1519 1521 { SemanticError( yylloc, MISSING_ANON_FIELD ); $$ = nullptr; } 1520 | comma_expression updown eq'@' '~' '@' // CFA, invalid syntax rule1522 | comma_expression updownS '@' '~' '@' // CFA, invalid syntax rule 1521 1523 { SemanticError( yylloc, MISSING_ANON_FIELD ); $$ = nullptr; } 1522 | '@' updown eq'@' '~' '@' // CFA, invalid syntax rule1524 | '@' updownS '@' '~' '@' // CFA, invalid syntax rule 1523 1525 { SemanticError( yylloc, MISSING_ANON_FIELD ); $$ = nullptr; } 1524 1526 … … 1527 1529 | comma_expression ';' comma_expression // CFA 1528 1530 { $$ = forCtrl( yylloc, $3, $1, NEW_ZERO, OperKinds::LThan, $3->clone(), NEW_ONE ); } 1529 | comma_expression ';' downupdowneqcomma_expression // CFA1531 | comma_expression ';' updown comma_expression // CFA 1530 1532 { $$ = forCtrl( yylloc, $4, $1, UPDOWN( $3, NEW_ZERO, $4->clone() ), $3, UPDOWN( $3, $4->clone(), NEW_ZERO ), NEW_ONE ); } 1531 1533 1532 | comma_expression ';' comma_expression updown eqcomma_expression // CFA1534 | comma_expression ';' comma_expression updownS comma_expression // CFA 1533 1535 { $$ = forCtrl( yylloc, $3, $1, UPDOWN( $4, $3->clone(), $5 ), $4, UPDOWN( $4, $5->clone(), $3->clone() ), NEW_ONE ); } 1534 | comma_expression ';' '@' updown eqcomma_expression // CFA1536 | comma_expression ';' '@' updownS comma_expression // CFA 1535 1537 { 1536 1538 if ( $4 == OperKinds::LThan || $4 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1537 1539 else $$ = forCtrl( yylloc, $5, $1, $5->clone(), $4, nullptr, NEW_ONE ); 1538 1540 } 1539 | comma_expression ';' comma_expression updown eq'@' // CFA1541 | comma_expression ';' comma_expression updownS '@' // CFA 1540 1542 { 1541 1543 if ( $4 == OperKinds::GThan || $4 == OperKinds::GEThan ) { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } … … 1543 1545 else $$ = forCtrl( yylloc, $3, $1, $3->clone(), $4, nullptr, NEW_ONE ); 1544 1546 } 1545 | comma_expression ';' '@' updown eq'@' // CFA, invalid syntax rule1547 | comma_expression ';' '@' updownS '@' // CFA, invalid syntax rule 1546 1548 { SemanticError( yylloc, "illegal syntax, missing low/high value for ascending/descending range so index is uninitialized." ); $$ = nullptr; } 1547 1549 1548 | comma_expression ';' comma_expression updowneq comma_expression '~' comma_expression // CFA 1550 | comma_expression ';' comma_expression updownEq comma_expression // CFA 1551 { $$ = forCtrl( yylloc, $3, $1, UPDOWN( $4, $3->clone(), $5 ), $4, UPDOWN( $4, $5->clone(), $3->clone() ), NEW_ONE ); } 1552 1553 | comma_expression ';' comma_expression updownS comma_expression '~' comma_expression // CFA 1549 1554 { $$ = forCtrl( yylloc, $3, $1, UPDOWN( $4, $3->clone(), $5 ), $4, UPDOWN( $4, $5->clone(), $3->clone() ), $7 ); } 1550 | comma_expression ';' '@' updown eqcomma_expression '~' comma_expression // CFA, invalid syntax rule1555 | comma_expression ';' '@' updownS comma_expression '~' comma_expression // CFA, invalid syntax rule 1551 1556 { 1552 1557 if ( $4 == OperKinds::LThan || $4 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1553 1558 else $$ = forCtrl( yylloc, $5, $1, $5->clone(), $4, nullptr, $7 ); 1554 1559 } 1555 | comma_expression ';' comma_expression updown eq'@' '~' comma_expression // CFA1560 | comma_expression ';' comma_expression updownS '@' '~' comma_expression // CFA 1556 1561 { 1557 1562 if ( $4 == OperKinds::GThan || $4 == OperKinds::GEThan ) { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } … … 1559 1564 else $$ = forCtrl( yylloc, $3, $1, $3->clone(), $4, nullptr, $7 ); 1560 1565 } 1561 | comma_expression ';' comma_expression updown eqcomma_expression '~' '@' // CFA1566 | comma_expression ';' comma_expression updownS comma_expression '~' '@' // CFA 1562 1567 { $$ = forCtrl( yylloc, $3, $1, UPDOWN( $4, $3->clone(), $5 ), $4, UPDOWN( $4, $5->clone(), $3->clone() ), nullptr ); } 1563 | comma_expression ';' '@' updown eqcomma_expression '~' '@' // CFA, invalid syntax rule1568 | comma_expression ';' '@' updownS comma_expression '~' '@' // CFA, invalid syntax rule 1564 1569 { 1565 1570 if ( $4 == OperKinds::LThan || $4 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1566 1571 else $$ = forCtrl( yylloc, $5, $1, $5->clone(), $4, nullptr, nullptr ); 1567 1572 } 1568 | comma_expression ';' comma_expression updown eq'@' '~' '@' // CFA1573 | comma_expression ';' comma_expression updownS '@' '~' '@' // CFA 1569 1574 { 1570 1575 if ( $4 == OperKinds::GThan || $4 == OperKinds::GEThan ) { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } … … 1572 1577 else $$ = forCtrl( yylloc, $3, $1, $3->clone(), $4, nullptr, nullptr ); 1573 1578 } 1574 | comma_expression ';' '@' updown eq '@' '~' '@'// CFA1579 | comma_expression ';' '@' updownS '@' '~' '@' // CFA 1575 1580 { SemanticError( yylloc, "illegal syntax, missing low/high value for ascending/descending range so index is uninitialized." ); $$ = nullptr; } 1576 1581 1577 // | '@' identifier ';' comma_expression // CFA1578 1582 | declaration comma_expression // CFA 1579 1583 { $$ = forCtrl( yylloc, $1, NEW_ZERO, OperKinds::LThan, $2, NEW_ONE ); } 1580 | declaration downupdowneq comma_expression// CFA1584 | declaration updown comma_expression // CFA 1581 1585 { $$ = forCtrl( yylloc, $1, UPDOWN( $2, NEW_ZERO, $3 ), $2, UPDOWN( $2, $3->clone(), NEW_ZERO ), NEW_ONE ); } 1582 1586 1583 | declaration comma_expression updown eqcomma_expression // CFA1587 | declaration comma_expression updownS comma_expression // CFA 1584 1588 { $$ = forCtrl( yylloc, $1, UPDOWN( $3, $2->clone(), $4 ), $3, UPDOWN( $3, $4->clone(), $2->clone() ), NEW_ONE ); } 1585 | declaration '@' updown eqcomma_expression // CFA1589 | declaration '@' updownS comma_expression // CFA 1586 1590 { 1587 1591 if ( $3 == OperKinds::LThan || $3 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1588 1592 else $$ = forCtrl( yylloc, $1, $4, $3, nullptr, NEW_ONE ); 1589 1593 } 1590 | declaration comma_expression updown eq'@' // CFA1594 | declaration comma_expression updownS '@' // CFA 1591 1595 { 1592 1596 if ( $3 == OperKinds::GThan || $3 == OperKinds::GEThan ) { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } … … 1595 1599 } 1596 1600 1597 | declaration comma_expression updowneq comma_expression '~' comma_expression // CFA 1601 | declaration comma_expression updownEq comma_expression // CFA 1602 { $$ = forCtrl( yylloc, $1, UPDOWN( $3, $2->clone(), $4 ), $3, UPDOWN( $3, $4->clone(), $2->clone() ), NEW_ONE ); } 1603 1604 | declaration comma_expression updownS comma_expression '~' comma_expression // CFA 1598 1605 { $$ = forCtrl( yylloc, $1, UPDOWN( $3, $2, $4 ), $3, UPDOWN( $3, $4->clone(), $2->clone() ), $6 ); } 1599 | declaration '@' updown eqcomma_expression '~' comma_expression // CFA1606 | declaration '@' updownS comma_expression '~' comma_expression // CFA 1600 1607 { 1601 1608 if ( $3 == OperKinds::LThan || $3 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1602 1609 else $$ = forCtrl( yylloc, $1, $4, $3, nullptr, $6 ); 1603 1610 } 1604 | declaration comma_expression updown eq'@' '~' comma_expression // CFA1611 | declaration comma_expression updownS '@' '~' comma_expression // CFA 1605 1612 { 1606 1613 if ( $3 == OperKinds::GThan || $3 == OperKinds::GEThan ) { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } … … 1608 1615 else $$ = forCtrl( yylloc, $1, $2, $3, nullptr, $6 ); 1609 1616 } 1610 | declaration comma_expression updown eqcomma_expression '~' '@' // CFA1617 | declaration comma_expression updownS comma_expression '~' '@' // CFA 1611 1618 { $$ = forCtrl( yylloc, $1, UPDOWN( $3, $2, $4 ), $3, UPDOWN( $3, $4->clone(), $2->clone() ), nullptr ); } 1612 | declaration '@' updown eq comma_expression '~' '@'// CFA1619 | declaration '@' updownS comma_expression '~' '@' // CFA 1613 1620 { 1614 1621 if ( $3 == OperKinds::LThan || $3 == OperKinds::LEThan ) { SemanticError( yylloc, MISSING_LOW ); $$ = nullptr; } 1615 1622 else $$ = forCtrl( yylloc, $1, $4, $3, nullptr, nullptr ); 1616 1623 } 1617 | declaration comma_expression updown eq'@' '~' '@' // CFA1624 | declaration comma_expression updownS '@' '~' '@' // CFA 1618 1625 { 1619 1626 if ( $3 == OperKinds::GThan || $3 == OperKinds::GEThan ) { SemanticError( yylloc, MISSING_HIGH ); $$ = nullptr; } … … 1621 1628 else $$ = forCtrl( yylloc, $1, $2, $3, nullptr, nullptr ); 1622 1629 } 1623 | declaration '@' updown eq'@' '~' '@' // CFA, invalid syntax rule1630 | declaration '@' updownS '@' '~' '@' // CFA, invalid syntax rule 1624 1631 { SemanticError( yylloc, "illegal syntax, missing low/high value for ascending/descending range so index is uninitialized." ); $$ = nullptr; } 1625 1632 … … 1628 1635 $$ = enumRangeCtrl( $1, OperKinds::LEThan, new ExpressionNode( new ast::TypeExpr( yylloc, $3->clone()->buildType() ) ), $3 ); 1629 1636 } 1630 | comma_expression ';' downupdowneq enum_key// CFA, enum type, reverse direction1637 | comma_expression ';' updown enum_key // CFA, enum type, reverse direction 1631 1638 { 1632 1639 if ( $3 == OperKinds::GThan ) { … … 1656 1663 ; 1657 1664 1658 // This rule exists to handle the ambiguity with unary operator '~'. The rule is the same as updown eqminus the '~'.1665 // This rule exists to handle the ambiguity with unary operator '~'. The rule is the same as updownS minus the '~'. 1659 1666 // Specifically, "for ( ~5 )" means the complement of 5, not loop 0..4. Hence, in this case "for ( ~= 5 )", i.e., 0..5, 1660 1667 // it is not possible to just remove the '='. The entire '~=' must be removed. 1661 downupdowneq:1662 ErangeUp 1668 updown: 1669 ErangeUpLt 1663 1670 { $$ = OperKinds::LThan; } 1664 | ErangeDown 1671 | ErangeDownGt 1665 1672 { $$ = OperKinds::GThan; } 1666 | ErangeUp Eq1673 | ErangeUpLe 1667 1674 { $$ = OperKinds::LEThan; } 1668 | ErangeDown Eq1675 | ErangeDownGe 1669 1676 { $$ = OperKinds::GEThan; } 1670 1677 ; 1671 1678 1672 updown :1679 updownS: 1673 1680 '~' // shorthand 0 ~ 10 => 0 +~ 10 1674 1681 { $$ = OperKinds::LThan; } 1675 | ErangeUp 1676 { $$ = OperKinds::LThan; } 1677 | ErangeDown 1678 { $$ = OperKinds::GThan; } 1679 ; 1680 1681 updowneq: 1682 updown 1683 | ErangeUpEq 1684 { $$ = OperKinds::LEThan; } 1682 | updown 1683 ; 1684 1685 updownEq: 1686 ErangeEq 1687 { $$ = OperKinds::Eq; } 1688 | ErangeNe 1689 { $$ = OperKinds::Neq; } 1685 1690 | ErangeDownEq 1686 { $$ = OperKinds::GEThan; } 1691 { $$ = OperKinds::Eq; } 1692 | ErangeDownNe 1693 { $$ = OperKinds::Neq; } 1687 1694 ; 1688 1695 … … 4061 4068 '~' 4062 4069 { $$ = OperKinds::LThan; } 4063 | ErangeUp Eq4070 | ErangeUpLe 4064 4071 { $$ = OperKinds::LEThan; } 4065 4072 ;
Note: See TracChangeset
for help on using the changeset viewer.