OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
AssemblerParser::definition< ScannerT > Struct Template Reference

#include <AssemblerParser.hh>

Collaboration diagram for AssemblerParser::definition< ScannerT >:
Collaboration graph

Public Member Functions

 definition (AssemblerParser const &self)
 
rule< ScannerT > const & start () const
 

Public Attributes

const AssemblerParserparent_
 
rule< ScannerT > comment
 
rule< ScannerT > my_space
 
rule< ScannerT > port
 
rule< ScannerT > name
 
rule< ScannerT > program
 
rule< ScannerT > area
 
rule< ScannerT > dataArea
 
rule< ScannerT > dataHeader
 
rule< ScannerT > dataLines
 
rule< ScannerT > dataLine
 
rule< ScannerT > initData
 
rule< ScannerT > uLiteral
 
rule< ScannerT > literal
 
rule< ScannerT > codeArea
 
rule< ScannerT > codeHeader
 
rule< ScannerT > codeLines
 
rule< ScannerT > codeLine
 
rule< ScannerT > literalOrExpression
 
rule< ScannerT > label
 
rule< ScannerT > codeLabel
 
rule< ScannerT > instruction
 
rule< ScannerT > emptyInstruction
 
rule< ScannerT > moves
 
rule< ScannerT > move
 
rule< ScannerT > emptyMove
 
rule< ScannerT > directive
 
rule< ScannerT > immediateSpec
 
rule< ScannerT > transport
 
rule< ScannerT > annotation
 
rule< ScannerT > initDataField
 
rule< ScannerT > guard
 
rule< ScannerT > invertFlag
 
rule< ScannerT > source
 
rule< ScannerT > destination
 
rule< ScannerT > dataLabel
 
rule< ScannerT > uNumber
 
rule< ScannerT > sNumber
 
rule< ScannerT > hexNumber
 
rule< ScannerT > binNumber
 
rule< ScannerT > index
 
rule< ScannerT > fuTerm
 
rule< ScannerT > indexTerm
 
rule< ScannerT > sLiteral
 
rule< ScannerT > backslashedChars
 
rule< ScannerT > regTerm
 
rule< ScannerT > offset
 
rule< ScannerT > symExpression
 
rule< ScannerT > expression
 
rule< ScannerT > immTerm
 
rule< ScannerT > busTerm
 

Detailed Description

template<typename ScannerT>
struct AssemblerParser::definition< ScannerT >

Definition at line 350 of file AssemblerParser.hh.

Constructor & Destructor Documentation

◆ definition()

template<typename ScannerT >
AssemblerParser::definition< ScannerT >::definition ( AssemblerParser const &  self)
inline

Definition at line 364 of file AssemblerParser.hh.

364 : parent_(self) {
365
366 // ------------------------------------------------------------
367 // omits comments and update current line couter
368 // ------------------------------------------------------------
369 comment = str_p("#") >>
370 (*(anychar_p - '\n') >> ch_p('\n'))
371 [increment_a(self.parserTemp_.lineNumber)]
372 ;
373
374 // ------------------------------------------------------------
375 // comment or any white empty space
376 // ------------------------------------------------------------
377 my_space =
378 comment
379 |
380
381 str_p("\n")
382 [increment_a(self.parserTemp_.lineNumber)]
383 |
384
385 space_p;
386
387 // ------------------------------------------------------------
388 // all literals are stored to parserTemp_.lastNumber field
389 // ------------------------------------------------------------
390 binNumber = str_p("0b") >> bin_p
391 [assign_a(self.parserTemp_.lastNumber)]
392 [assign_a(self.parserTemp_.isLastSigned, MY_FALSE)];
393
394 hexNumber = str_p("0x") >> hex_p
395 [assign_a(self.parserTemp_.lastNumber)]
396 [assign_a(self.parserTemp_.isLastSigned, MY_FALSE)];
397
398 uNumber = uint_p
399 [assign_a(self.parserTemp_.lastNumber)]
400 [assign_a(self.parserTemp_.isLastSigned, MY_FALSE)];
401
402 sNumber = int_p
403 [assign_a(self.parserTemp_.lastNumber)]
404 [assign_a(self.parserTemp_.isLastSigned, MY_TRUE)];
405
406 // ------------------------------------------------------------
407 // unsigned literal
408 // ------------------------------------------------------------
410
411 // ------------------------------------------------------------
412 // convert backslashed character " and also
413 // accept plain \-character
414 // ------------------------------------------------------------
416 str_p("\\\"")
417 ;
418
419 // ------------------------------------------------------------
420 // string literal
421 // ------------------------------------------------------------
422 sLiteral =
423 eps_p
424 [assign_a(self.parserTemp_.sLiteral, "")] >>
425
426 (ch_p('\"') >>
427
429 (anychar_p - ch_p('\"')) ) >>
430
431 ch_p('\"'))
432 [PrintString(std::string(
433 "String literals are not supported yet!\n").c_str())]
434 ;
435
436 // ------------------------------------------------------------
437 // any literal
438 // ------------------------------------------------------------
440
441 // ------------------------------------------------------------
442 // any valid string
443 // NOTE: we are not as liberal as ADF specification,
444 // we don't allow ':'
445 // ------------------------------------------------------------
446 name = (alpha_p | chset_p("_")) >> *(alnum_p | chset_p("_"));
447
448 // ------------------------------------------------------------
449 // index is unsigned number and stored to parserTemp_.index field.
450 // ------------------------------------------------------------
451 index = uNumber[assign_a(self.parserTemp_.index,
452 self.parserTemp_.lastNumber)];
453
454 // ------------------------------------------------------------
455 // {prev} and {next} reference which are not yet supported
456 // ------------------------------------------------------------
457 busTerm = '{' >>
458 (str_p("prev")
459 [assign_a(self.parserTemp_.busTerm.prev, MY_TRUE)]|
460 str_p("next")
461 [assign_a(self.parserTemp_.busTerm.prev, MY_FALSE)]) >> '}';
462
463 // ------------------------------------------------------------
464 // unit.port[.operation] is stored to parserTemp_.fuTerm field
465 // ------------------------------------------------------------
466 fuTerm =
467 eps_p
468 [assign_a(self.parserTemp_.fuTerm.part3Used, MY_FALSE)] >>
469
470 name
471 [assign_a(self.parserTemp_.fuTerm.part1)] >> '.' >>
472
473 name
474 [assign_a(self.parserTemp_.fuTerm.part2)] >>
475
476 !('.' >> name[assign_a(self.parserTemp_.fuTerm.part3)])
477 [assign_a(self.parserTemp_.fuTerm.part3Used, MY_TRUE)];
478
479 // ------------------------------------------------------------
480 // rf[.port].index and fu.operation.index is stored to
481 // parserTemp_.indexTerm field
482 // ------------------------------------------------------------
483 indexTerm =
484 eps_p
485 [assign_a(self.parserTemp_.indexTerm.part2Used, MY_FALSE)] >>
486
487 name
488 [assign_a(self.parserTemp_.indexTerm.part1)] >> '.' >>
489
490 !(name[assign_a(self.parserTemp_.indexTerm.part2)] >> '.')
491 [assign_a(self.parserTemp_.indexTerm.part2Used, MY_TRUE)] >>
492
493 index
494 [assign_a(self.parserTemp_.indexTerm.index,
495 self.parserTemp_.index)];
496
497 // ------------------------------------------------------------
498 // copy last parsed term and its type to regTerm
499 // ------------------------------------------------------------
500 regTerm =
502 [assign_a(self.parserTemp_.regTerm.indexTerm,
503 self.parserTemp_.indexTerm)]
504 [assign_a(self.parserTemp_.regTerm.type, INDEX_TERM)]|
505
506 fuTerm
507 [assign_a(self.parserTemp_.regTerm.fuTerm,
508 self.parserTemp_.fuTerm)]
509 [assign_a(self.parserTemp_.regTerm.type, FUNCTION_UNIT_TERM)]|
510
511 busTerm
512 [assign_a(self.parserTemp_.regTerm.busTerm,
513 self.parserTemp_.busTerm)]
514 [assign_a(self.parserTemp_.regTerm.type, BUS_TERM)];
515
516
517 // ------------------------------------------------------------
518 // offset part of expression stored to parserTemp_.expression
519 // ------------------------------------------------------------
520 offset =
521 sign_p[assign_a(self.parserTemp_.expression.isMinus)] >>
522
523 *my_space >>
524
526 [assign_a(self.parserTemp_.expression.offset,
527 self.parserTemp_.lastNumber)];
528
529 // ------------------------------------------------------------
530 // name[(+|-)offset] stored to parserTemp_.expression
531 // ------------------------------------------------------------
533 name
534 [assign_a(self.parserTemp_.expression.label)] >>
535
536 !(*my_space >> offset)
537 [assign_a(self.parserTemp_.expression.hasOffset, MY_TRUE)];
538
539 // ------------------------------------------------------------
540 // name[(+|-)offset][=literal] stored to parserTemp_.expression
541 // ------------------------------------------------------------
542 expression =
543 eps_p
544 [assign_a(self.parserTemp_.expression.hasValue, MY_FALSE)]
545 [assign_a(self.parserTemp_.expression.hasOffset, MY_FALSE)] >>
546
548
549 !(*my_space >> '=' >> *my_space >> literal)
550 [assign_a(self.parserTemp_.expression.value,
551 self.parserTemp_.lastNumber)]
552 [assign_a(self.parserTemp_.expression.hasValue, MY_TRUE)];
553
554 // ------------------------------------------------------------
555 // either literal or expression
556 // ------------------------------------------------------------
558 literal
559 [assign_a(self.parserTemp_.litOrExpr.value,
560 self.parserTemp_.lastNumber)]
561 [assign_a(self.parserTemp_.litOrExpr.isExpression, MY_FALSE)]
562 [assign_a(self.parserTemp_.litOrExpr.isSigned,
563 self.parserTemp_.isLastSigned)]|
564
566 [assign_a(self.parserTemp_.litOrExpr.expression,
567 self.parserTemp_.expression)]
568 [assign_a(self.parserTemp_.litOrExpr.isExpression, MY_TRUE)];
569
570 // ------------------------------------------------------------
571 // store immediate term of move to parserTemp_.move
572 // ------------------------------------------------------------
573 immTerm =
575 [assign_a(self.parserTemp_.move.source.immTerm,
576 self.parserTemp_.litOrExpr)];
577
578 // ------------------------------------------------------------
579 // store destination
580 // ------------------------------------------------------------
582 regTerm
583 [assign_a(self.parserTemp_.move.destination,
584 self.parserTemp_.regTerm)];
585
586 // ------------------------------------------------------------
587 // store source
588 // ------------------------------------------------------------
589 source =
590 regTerm
591 [assign_a(self.parserTemp_.move.source.regTerm,
592 self.parserTemp_.regTerm)]
593 [assign_a(self.parserTemp_.move.source.isRegister, MY_TRUE)]|
594
595 immTerm
596 [assign_a(self.parserTemp_.move.source.isRegister, MY_FALSE)];
597
598 // ------------------------------------------------------------
599 // guards type
600 // ------------------------------------------------------------
601 invertFlag =
602 ch_p('?')[assign_a(self.parserTemp_.move.guard.isInverted,
603 MY_FALSE)]|
604
605 ch_p('!')[assign_a(self.parserTemp_.move.guard.isInverted,
606 MY_TRUE)];
607
608 // ------------------------------------------------------------
609 // port or register guard
610 // ------------------------------------------------------------
611 guard =
613 [assign_a(self.parserTemp_.move.guard.regTerm,
614 self.parserTemp_.regTerm)];
615
616 // ------------------------------------------------------------
617 // [field-size:]init-value one init data field of data area
618 // definition
619 // ------------------------------------------------------------
621 eps_p
622 [assign_a(self.parserTemp_.initDataField.width, MY_ZERO)] >>
623
624 !(uNumber >> *my_space >> ':' >> *my_space)
625 [assign_a(self.parserTemp_.initDataField.width,
626 self.parserTemp_.lastNumber)] >>
627
629 [assign_a(self.parserTemp_.initDataField.litOrExpr,
630 self.parserTemp_.litOrExpr)];
631
632 // ------------------------------------------------------------
633 // annotationes
634 //
635 // Only supported syntax for annotation is
636 // "{hexId value value ...}"
637 // ------------------------------------------------------------
638 annotation =
639 eps_p
640 [clear_a(self.parserTemp_.annotation.payload)] >>
641
642 (ch_p('{') >> *my_space >>
643 hexNumber[assign_a(self.parserTemp_.annotation.id,
644 self.parserTemp_.lastNumber)] >>
645
646 *(+my_space >>
647 initDataField[push_back_a(self.parserTemp_.annotation.payload,
648 self.parserTemp_.initDataField)]) >>
649
650 *my_space >> ch_p('}'));
651
652 // ------------------------------------------------------------
653 // one move that moves data through a bus
654 // ------------------------------------------------------------
655 transport =
656 eps_p
657 [assign_a(self.parserTemp_.move.guard.isGuarded, MY_FALSE)]
658 [clear_a(self.parserTemp_.move.annotationes)] >>
659
660 !(guard >> *my_space)
661 [assign_a(self.parserTemp_.move.guard.isGuarded, MY_TRUE)] >>
662
663 source >>
664 *my_space >> str_p("->") >> *my_space >>
665
666 destination >>
667
668 *(*my_space >> annotation[push_back_a(
669 self.parserTemp_.move.annotationes,
670 self.parserTemp_.annotation)]);
671
672 // ------------------------------------------------------------
673 // long immediates
674 // ------------------------------------------------------------
676 // moves destination stores immediate unit and register.
677 eps_p
678 [clear_a(self.parserTemp_.move.annotationes)] >>
679
680 ch_p('[') >> *my_space >>
681 destination >>
682
683 *my_space >> '=' >> *my_space >>
684
685 // moves source is used as a value
687 [assign_a(self.parserTemp_.move.source.immTerm,
688 self.parserTemp_.litOrExpr)]
689 [assign_a(self.parserTemp_.move.source.isRegister,
690 MY_FALSE)] >>
691
692 *my_space >> ch_p(']') >>
693
694 *(*my_space >> annotation[push_back_a(
695 self.parserTemp_.move.annotationes,
696 self.parserTemp_.annotation)]);
697 // ------------------------------------------------------------
698 // empty move
699 // ------------------------------------------------------------
700 emptyMove = str_p("...");
701
702 // ------------------------------------------------------------
703 // one immediate, transport or empty move
704 // ------------------------------------------------------------
705 move =
707 [assign_a(self.parserTemp_.move.type, EMPTY_MOVE)] |
708
710 [assign_a(self.parserTemp_.move.type, TRANSPORT_MOVE)];
711
712 // ------------------------------------------------------------
713 // parses instruction and adds moves to CodeSectionCreator
714 // ------------------------------------------------------------
715 moves =
716 move
717 [assign_a(self.parserTemp_.move.isBegin, MY_TRUE)]
718 [assign_a(self.parserTemp_.move.asmLineNumber,
719 self.parserTemp_.lineNumber)]
721 self.codeSectionCreator_, self.parserTemp_.move)] >>
722
723 *(*my_space >> ',' >> *my_space >>
724 move
725 [assign_a(self.parserTemp_.move.isBegin, MY_FALSE)]
726 [assign_a(self.parserTemp_.move.asmLineNumber,
727 self.parserTemp_.lineNumber)]
729 self.codeSectionCreator_, self.parserTemp_.move)]);
730
731 // ------------------------------------------------------------
732 // empty instruction
733 // ------------------------------------------------------------
735 str_p(". . .");
736
737 // ------------------------------------------------------------
738 // empty or populated instruction
739 // ------------------------------------------------------------
743 self.codeSectionCreator_, EMPTY_BEGIN_MOVE)] |
744 moves;
745
746 // ------------------------------------------------------------
747 // label definitions
748 // ------------------------------------------------------------
749 label =
750 (name[assign_a(self.parserTemp_.label)] >> *my_space >> ':') ;
751
752 // ------------------------------------------------------------
753 // code labels can be added straight to label manager,
754 // since we don't have to resolve address of label separately
755 // ------------------------------------------------------------
756 codeLabel =
757 label
759 self.labelManager_,
760 *self.resourceManager_.codeAddressSpace(),
761 self.parserTemp_.label,
762 self.parserTemp_.codeLineCount)];
763
764 // ------------------------------------------------------------
765 // directive definitions
766 // ------------------------------------------------------------
767 directive =
768 ch_p(':') >> *my_space >>
769
770 ((str_p("procedure") >> +my_space >>
771 (name[assign_a(self.parserTemp_.directive)])
772
774 self.labelManager_,
775 self.parserTemp_.directive,
776 self.parserTemp_.codeLineCount)]) |
777
778 (str_p("global") >> +my_space >>
779 name[SetGlobalActor(self.labelManager_)]));
780
781 // ------------------------------------------------------------
782 // one code line terminated by semicolon
783 // ------------------------------------------------------------
784 codeLine =
785 *(codeLabel >> *my_space) >>
786
788 [increment_a(self.parserTemp_.codeLineCount)] >>
789
790 // immediate encoding from dedicated instruction slots
792 [assign_a(self.parserTemp_.move.type, LONG_IMM)]
794 self.codeSectionCreator_, self.parserTemp_.move)];
795
796 // ------------------------------------------------------------
797 // body of code section (instructions and directives)
798 // ------------------------------------------------------------
799 codeLines =
800 *((codeLine|directive) >>
801 *my_space >> ';' >> *my_space);
802
803 // ------------------------------------------------------------
804 // code header with start address
805 // ------------------------------------------------------------
806 codeHeader =
807 eps_p
808 [assign_a(self.parserTemp_.lastNumber, MY_ZERO)] >>
809
810 str_p("CODE") >>
811 !(+my_space >> literal) >> *my_space >> ';';
812
813 // ------------------------------------------------------------
814 // code section (header and body)
815 // ------------------------------------------------------------
816 codeArea =
819 self.codeSectionCreator_, self.parserTemp_.lastNumber)] >>
820
822
823 // ------------------------------------------------------------
824 // all init data fields of data line
825 // ------------------------------------------------------------
826 initData =
827 *(+my_space >>
829 [push_back_a(self.parserTemp_.dataLine.initData,
830 self.parserTemp_.initDataField)]);
831
832 // ------------------------------------------------------------
833 // data label definitions
834 // ------------------------------------------------------------
835 dataLabel =
836 label
837 [push_back_a(self.parserTemp_.dataLine.labels,
838 self.parserTemp_.label)];
839
840 // ------------------------------------------------------------
841 // one data line with data are definition and label
842 // ------------------------------------------------------------
843 dataLine =
844 *(dataLabel >> *my_space) >>
845
846 str_p("DA") >> +my_space >>
847
848 uNumber[assign_a(self.parserTemp_.dataLine.width,
849 self.parserTemp_.lastNumber)] >>
850
851 initData;
852
853 // ------------------------------------------------------------
854 // body of data section
855 // ------------------------------------------------------------
856 dataLines =
857 *((dataLine
858 [assign_a(self.parserTemp_.dataLine.asmLineNumber,
859 self.parserTemp_.lineNumber)]
861 self.dataSectionCreator_, self.parserTemp_.dataLine)]
862 [clear_a(self.parserTemp_.dataLine.initData)]
863 [clear_a(self.parserTemp_.dataLine.labels)] |
864
865 directive) >>
866
867 *my_space >> ';' >> *my_space);
868
869 // ------------------------------------------------------------
870 // data section header with address space name and start address
871 // ------------------------------------------------------------
872 dataHeader =
873 str_p("DATA") >>
874 +my_space >>
875
876 name[assign_a(self.parserTemp_.dataLine.dataSpace)] >>
877
878 !(+my_space >> literal)
879 [SetStartAddressActor(self.dataSectionCreator_,
880 self.parserTemp_.lastNumber)] >>
881
882 *my_space >> ';';
883
884 // ------------------------------------------------------------
885 // data section definition (header and boby)
886 // ------------------------------------------------------------
887 dataArea =
888 dataHeader >>
890
891 // ------------------------------------------------------------
892 // one data or code section
893 // ------------------------------------------------------------
894 area =
896
897 // ------------------------------------------------------------
898 // whole program (multiple sections)
899 // ------------------------------------------------------------
900 program =
901 (*(*my_space >> area) >> *my_space);
902 }
const ParserMove::MoveType LONG_IMM
const ParserMove::MoveType TRANSPORT_MOVE
const ParserMove::MoveType EMPTY_MOVE
const RegisterTerm::TermType INDEX_TERM
const RegisterTerm::TermType FUNCTION_UNIT_TERM
const ParserMove EMPTY_BEGIN_MOVE(ParserMove::EMPTY, true)
Empty parser move with isBegin flag set.
const UValue MY_ZERO
const bool MY_TRUE
const RegisterTerm::TermType BUS_TERM
const bool MY_FALSE
rule< ScannerT > literalOrExpression
const AssemblerParser & parent_

References ParserTemp::annotation, AssemblerParser::definition< ScannerT >::annotation, ParserMove::annotationes, AssemblerParser::definition< ScannerT >::area, ParserMove::asmLineNumber, DataLine::asmLineNumber, AssemblerParser::definition< ScannerT >::backslashedChars, AssemblerParser::definition< ScannerT >::binNumber, BUS_TERM, ParserTemp::busTerm, AssemblerParser::definition< ScannerT >::busTerm, RegisterTerm::busTerm, MachineResourceManager::codeAddressSpace(), AssemblerParser::definition< ScannerT >::codeArea, AssemblerParser::definition< ScannerT >::codeHeader, AssemblerParser::definition< ScannerT >::codeLabel, AssemblerParser::definition< ScannerT >::codeLine, ParserTemp::codeLineCount, AssemblerParser::definition< ScannerT >::codeLines, AssemblerParser::codeSectionCreator_, AssemblerParser::definition< ScannerT >::comment, AssemblerParser::definition< ScannerT >::dataArea, AssemblerParser::definition< ScannerT >::dataHeader, AssemblerParser::definition< ScannerT >::dataLabel, ParserTemp::dataLine, AssemblerParser::definition< ScannerT >::dataLine, AssemblerParser::definition< ScannerT >::dataLines, AssemblerParser::dataSectionCreator_, DataLine::dataSpace, AssemblerParser::definition< ScannerT >::destination, ParserMove::destination, ParserTemp::directive, AssemblerParser::definition< ScannerT >::directive, EMPTY_BEGIN_MOVE, EMPTY_MOVE, AssemblerParser::definition< ScannerT >::emptyInstruction, AssemblerParser::definition< ScannerT >::emptyMove, ParserTemp::expression, AssemblerParser::definition< ScannerT >::expression, LiteralOrExpression::expression, FUNCTION_UNIT_TERM, ParserTemp::fuTerm, AssemblerParser::definition< ScannerT >::fuTerm, RegisterTerm::fuTerm, AssemblerParser::definition< ScannerT >::guard, ParserMove::guard, Expression::hasOffset, Expression::hasValue, AssemblerParser::definition< ScannerT >::hexNumber, Annotation::id, AssemblerParser::definition< ScannerT >::immediateSpec, AssemblerParser::definition< ScannerT >::immTerm, ParserSource::immTerm, ParserTemp::index, AssemblerParser::definition< ScannerT >::index, IndexTerm::index, INDEX_TERM, ParserTemp::indexTerm, AssemblerParser::definition< ScannerT >::indexTerm, RegisterTerm::indexTerm, AssemblerParser::definition< ScannerT >::initData, DataLine::initData, ParserTemp::initDataField, AssemblerParser::definition< ScannerT >::initDataField, AssemblerParser::definition< ScannerT >::instruction, AssemblerParser::definition< ScannerT >::invertFlag, ParserMove::isBegin, LiteralOrExpression::isExpression, ParserGuard::isGuarded, ParserGuard::isInverted, ParserTemp::isLastSigned, Expression::isMinus, ParserSource::isRegister, LiteralOrExpression::isSigned, ParserTemp::label, AssemblerParser::definition< ScannerT >::label, Expression::label, AssemblerParser::labelManager_, DataLine::labels, ParserTemp::lastNumber, ParserTemp::lineNumber, AssemblerParser::definition< ScannerT >::literal, AssemblerParser::definition< ScannerT >::literalOrExpression, ParserTemp::litOrExpr, InitDataField::litOrExpr, LONG_IMM, ParserTemp::move, AssemblerParser::definition< ScannerT >::move, AssemblerParser::definition< ScannerT >::moves, MY_FALSE, AssemblerParser::definition< ScannerT >::my_space, MY_TRUE, MY_ZERO, AssemblerParser::definition< ScannerT >::name, AssemblerParser::definition< ScannerT >::offset, Expression::offset, AssemblerParser::parserTemp_, FUTerm::part1, IndexTerm::part1, FUTerm::part2, IndexTerm::part2, IndexTerm::part2Used, FUTerm::part3, FUTerm::part3Used, Annotation::payload, BusTerm::prev, AssemblerParser::definition< ScannerT >::program, ParserTemp::regTerm, AssemblerParser::definition< ScannerT >::regTerm, ParserSource::regTerm, ParserGuard::regTerm, AssemblerParser::resourceManager_, ParserTemp::sLiteral, AssemblerParser::definition< ScannerT >::sLiteral, AssemblerParser::definition< ScannerT >::sNumber, AssemblerParser::definition< ScannerT >::source, ParserMove::source, AssemblerParser::definition< ScannerT >::symExpression, AssemblerParser::definition< ScannerT >::transport, TRANSPORT_MOVE, RegisterTerm::type, ParserMove::type, AssemblerParser::definition< ScannerT >::uLiteral, AssemblerParser::definition< ScannerT >::uNumber, Expression::value, LiteralOrExpression::value, InitDataField::width, and DataLine::width.

Here is the call graph for this function:

Member Function Documentation

◆ start()

template<typename ScannerT >
rule< ScannerT > const & AssemblerParser::definition< ScannerT >::start ( ) const
inline

Spirits grammar interface.

Definition at line 920 of file AssemblerParser.hh.

920 {
921 if (parent_.codeLinesOnly()) {
922 return codeLines;
923 } else {
924 return program;
925 }
926 }
bool codeLinesOnly() const

References AssemblerParser::definition< ScannerT >::codeLines, AssemblerParser::codeLinesOnly(), AssemblerParser::definition< ScannerT >::parent_, and AssemblerParser::definition< ScannerT >::program.

Here is the call graph for this function:

Member Data Documentation

◆ annotation

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::annotation

◆ area

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::area

◆ backslashedChars

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::backslashedChars

◆ binNumber

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::binNumber

◆ busTerm

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::busTerm

◆ codeArea

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::codeArea

◆ codeHeader

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::codeHeader

◆ codeLabel

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::codeLabel

◆ codeLine

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::codeLine

◆ codeLines

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::codeLines

◆ comment

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::comment

◆ dataArea

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::dataArea

◆ dataHeader

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::dataHeader

◆ dataLabel

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::dataLabel

◆ dataLine

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::dataLine

◆ dataLines

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::dataLines

◆ destination

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::destination

◆ directive

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::directive

◆ emptyInstruction

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::emptyInstruction

◆ emptyMove

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::emptyMove

◆ expression

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::expression

◆ fuTerm

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::fuTerm

◆ guard

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::guard

◆ hexNumber

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::hexNumber

◆ immediateSpec

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::immediateSpec

◆ immTerm

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::immTerm

◆ index

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::index

◆ indexTerm

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::indexTerm

◆ initData

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::initData

◆ initDataField

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::initDataField

◆ instruction

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::instruction

◆ invertFlag

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::invertFlag

◆ label

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::label

◆ literal

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::literal

◆ literalOrExpression

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::literalOrExpression

◆ move

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::move

◆ moves

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::moves

◆ my_space

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::my_space

◆ name

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::name

◆ offset

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::offset

◆ parent_

template<typename ScannerT >
const AssemblerParser& AssemblerParser::definition< ScannerT >::parent_

Definition at line 352 of file AssemblerParser.hh.

Referenced by AssemblerParser::definition< ScannerT >::start().

◆ port

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::port

Definition at line 906 of file AssemblerParser.hh.

◆ program

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::program

◆ regTerm

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::regTerm

◆ sLiteral

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::sLiteral

◆ sNumber

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::sNumber

◆ source

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::source

◆ symExpression

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::symExpression

◆ transport

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::transport

◆ uLiteral

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::uLiteral

◆ uNumber

template<typename ScannerT >
rule<ScannerT> AssemblerParser::definition< ScannerT >::uNumber

The documentation for this struct was generated from the following file: