Blame vhdlparser/vhdlparser.jj

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 2014 by M. Kreis
Packit 1c1d7e
 *
Packit 1c1d7e
 * Permission to use, copy, modify, and distribute this software and its
Packit 1c1d7e
 * documentation under the terms of the GNU General Public License is hereby
Packit 1c1d7e
 * granted. No representations are made about the suitability of this software
Packit 1c1d7e
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit 1c1d7e
 * See the GNU General Public License for more details.
Packit 1c1d7e
 *
Packit 1c1d7e
 */
Packit 1c1d7e
options {
Packit 1c1d7e
  JAVA_UNICODE_ESCAPE = true;
Packit 1c1d7e
  OUTPUT_LANGUAGE = "c++";
Packit 1c1d7e
  NAMESPACE = "vhdl::parser";
Packit 1c1d7e
  STATIC=false;
Packit 1c1d7e
  PARSER_INCLUDES="vhdljjparser.h";
Packit 1c1d7e
  TOKEN_MANAGER_INCLUDES="VhdlParser.h";
Packit 1c1d7e
Packit 1c1d7e
 //OUTPUT_DIRECTORY = ".";
Packit 1c1d7e
 //DEBUG_PARSER=true;
Packit 1c1d7e
 //DEBUG_LOOKAHEAD=true;
Packit 1c1d7e
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
PARSER_BEGIN(VhdlParser)
Packit 1c1d7e
Packit 1c1d7e
typedef unsigned long long uint64;
Packit 1c1d7e
Packit 1c1d7e
static Entry* current_root;
Packit 1c1d7e
static Entry* tempEntry;
Packit 1c1d7e
static Entry*  lastEntity  ;
Packit 1c1d7e
static Entry*  lastCompound  ;
Packit 1c1d7e
static Entry*  current;
Packit 1c1d7e
static QCString compSpec;
Packit 1c1d7e
static QCString currName;
Packit 1c1d7e
static int levelCounter;
Packit 1c1d7e
static QCString confName;
Packit 1c1d7e
static QCString genLabels;
Packit 1c1d7e
static QCString lab;
Packit 1c1d7e
static QCString forL;
Packit 1c1d7e
static int param_sec ;
Packit 1c1d7e
static int parse_sec;
Packit 1c1d7e
static int currP;
Packit 1c1d7e
static Entry* currentCompound;
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------
Packit 1c1d7e
Packit 1c1d7e
static void setLineParsed(int tok);
Packit 1c1d7e
static int getLine(int tok);
Packit 1c1d7e
static int getLine();
Packit 1c1d7e
static void lineCount(const char*);
Packit 1c1d7e
static void lineCount();
Packit 1c1d7e
static void addProto(const char *s1,const char *s2,const char *s3,const char *s4,const char *s5,const char *s6);
Packit 1c1d7e
static void addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf);
Packit 1c1d7e
static void createFunction(const char *impure,uint64 spec,const char *fname);
Packit 1c1d7e
static void addVhdlType(const char *n,int startLine,int section, uint64 spec,const char* args,const char* type,Protection prot);
Packit 1c1d7e
static void addCompInst(const char *n, const char* instName, const char* comp,int iLine);
Packit 1c1d7e
static void handleCommentBlock(const char* doc,bool brief);
Packit 1c1d7e
static void handleFlowComment(const char*);
Packit 1c1d7e
static void initEntry(Entry *e);
Packit 1c1d7e
static  void newEntry();
Packit 1c1d7e
static  bool isFuncProcProced();
Packit 1c1d7e
static void pushLabel(QCString &,QCString&);
Packit 1c1d7e
static  QCString popLabel(QCString & q);
Packit 1c1d7e
static  bool addLibUseClause(const QCString &type);
Packit 1c1d7e
static  void mapLibPackage( Entry* root);
Packit 1c1d7e
static void createFlow();
Packit 1c1d7e
static void error_skipto(int kind);
Packit 1c1d7e
static void oneLineComment(QCString qcs);
Packit 1c1d7e
static void setMultCommentLine();
Packit 1c1d7e
PARSER_END(VhdlParser)
Packit 1c1d7e
Packit 1c1d7e
SKIP :
Packit 1c1d7e
{
Packit 1c1d7e
  " "
Packit 1c1d7e
| "\t"
Packit 1c1d7e
| "\n" {::vhdl::parser::VhdlParser::lineCount();}
Packit 1c1d7e
| "\r"
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
SKIP:
Packit 1c1d7e
{
Packit 1c1d7e
  // VHDL comment -- ......
Packit 1c1d7e
  // VHDL doxygen line comment --! ....
Packit 1c1d7e
  <#DOXYGEN_VHDL_COMMENT: (" "|"\t")*"--!"(~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
Packit 1c1d7e
  | <MULT_DOXYGEN_COMMENT: (<DOXYGEN_VHDL_COMMENT>)+ >
Packit 1c1d7e
  {
Packit 1c1d7e
    {
Packit 1c1d7e
    QCString doc(image.data());
Packit 1c1d7e
    int count=doc.contains("--!");
Packit 1c1d7e
    ::vhdl::parser::VhdlParser::setMultCommentLine();
Packit 1c1d7e
    ::vhdl::parser::VhdlParser::lineCount(image.data());
Packit 1c1d7e
    if (count == 1)
Packit 1c1d7e
      ::vhdl::parser::VhdlParser::oneLineComment(doc);
Packit 1c1d7e
    else
Packit 1c1d7e
      ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),FALSE); ;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
  }
Packit 1c1d7e
  |<VHDL_FLOWCHART_COMMENT: "--#" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>  { ::vhdl::parser::VhdlParser::handleFlowComment(image.data());}
Packit 1c1d7e
  |<VHDL_COMMENT: "--" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
Packit 1c1d7e
  {
Packit 1c1d7e
    ::vhdl::parser::VhdlParser::lineCount(image.data());}
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
// VHDL 2008  comment /* .... */
Packit 1c1d7e
// VHDL 2008 doxygen comment /*! .... */
Packit 1c1d7e
SKIP :
Packit 1c1d7e
{
Packit 1c1d7e
  <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!"  (~[])* "*/" >
Packit 1c1d7e
  {
Packit 1c1d7e
   {
Packit 1c1d7e
     QCString q(image.data());
Packit 1c1d7e
     q.stripPrefix("/*!");
Packit 1c1d7e
     q.resize(q.length()-2);
Packit 1c1d7e
     ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
Packit 1c1d7e
   }
Packit 1c1d7e
  }
Packit 1c1d7e
  | <MULT_VHDL_2008_COMMENT : "/*"  (~[])* "*/" >  {::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
/* KEYWORDS */
Packit 1c1d7e
Packit 1c1d7e
TOKEN [IGNORE_CASE] :
Packit 1c1d7e
{
Packit 1c1d7e
 <ABS_T: "abs">
Packit 1c1d7e
| <ACCESS_T: "access">
Packit 1c1d7e
| <AFTER_T: "after">
Packit 1c1d7e
| <ALIAS_T: "alias">
Packit 1c1d7e
| <ALL_T: "all">
Packit 1c1d7e
| <AND_T: "and">
Packit 1c1d7e
| <ARCHITECTURE_T: "architecture"> {::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T);}
Packit 1c1d7e
| <ARRAY_T: "array"> {VhdlParser::setLineParsed(ARRAY_T);}
Packit 1c1d7e
| <ASSERT_T: "assert">
Packit 1c1d7e
| <ASSUME_T: "assume">
Packit 1c1d7e
| <ASSUME_GUARANTEE_T: "assume_guarentee">
Packit 1c1d7e
| <ATTRIBUTE_T: "attribute"> {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);}
Packit 1c1d7e
| <BEGIN_T: "begin">
Packit 1c1d7e
| <BLOCK_T: "block">
Packit 1c1d7e
| <BODY_T: "body"> {::vhdl::parser::VhdlParser::setLineParsed(BODY_T);}
Packit 1c1d7e
| <BUFFER_T: "buffer">
Packit 1c1d7e
| <BUS_T: "bus">
Packit 1c1d7e
| <COMPONENT_T: "component"> {VhdlParser::setLineParsed(COMPONENT_T);}
Packit 1c1d7e
| <CASE_T: "case">
Packit 1c1d7e
| <CONFIGURATION_T: "configuration"> {VhdlParser::setLineParsed(CONFIGURATION_T);}
Packit 1c1d7e
| <CONSTANT_T: "constant">  {VhdlParser::setLineParsed(CONSTANT_T);}
Packit 1c1d7e
| <CONTEXT_T: "context"> {VhdlParser::setLineParsed(CONTEXT_T);}
Packit 1c1d7e
| <COVER_T: "cover">
Packit 1c1d7e
| <DEFAULT_T: "default">
Packit 1c1d7e
| <DISCONNECT_T: "disconnect">
Packit 1c1d7e
| <DOWNTO_T: "downto">
Packit 1c1d7e
| <ELSE_T: "else">
Packit 1c1d7e
| <ELSIF_T: "elsif">
Packit 1c1d7e
| <END_T: "end"> {VhdlParser::setLineParsed(END_T);}
Packit 1c1d7e
| <ENTITY_T: "entity"> {VhdlParser::setLineParsed(ENTITY_T);}
Packit 1c1d7e
| <EXIT_T: "exit">
Packit 1c1d7e
| <FAIRNESS_T: "fairness">
Packit 1c1d7e
| <FILE_T: "file"> {VhdlParser::setLineParsed(FILE_T);}
Packit 1c1d7e
| <FOR_T: "for">
Packit 1c1d7e
| <FORCE_T: "force">
Packit 1c1d7e
| <FUNCTION_T: "function">  {VhdlParser::setLineParsed(FUNCTION_T);}
Packit 1c1d7e
| <GENERATE_T: "generate">
Packit 1c1d7e
| <GENERIC_T: "generic">
Packit 1c1d7e
| <GROUP_T: "group"> {VhdlParser::setLineParsed(GROUP_T);}
Packit 1c1d7e
| <GUARDED_T: "guarded">
Packit 1c1d7e
| <IF_T: "if">
Packit 1c1d7e
| <IMPURE_T: "impure">
Packit 1c1d7e
| <IN_T: "in">
Packit 1c1d7e
| <INERTIAL_T: "inertial">
Packit 1c1d7e
| <INOUT_T: "inout">
Packit 1c1d7e
| <IS_T: "is">
Packit 1c1d7e
| <LABEL_T: "label">
Packit 1c1d7e
| <LIBRARY_T: "library"> {VhdlParser::setLineParsed(LIBRARY_T);}
Packit 1c1d7e
| <LINKAGE_T: "linkage">
Packit 1c1d7e
| <LITERAL_T: "literal">
Packit 1c1d7e
| <LOOP_T: "loop">
Packit 1c1d7e
| <MAP_T: "map">
Packit 1c1d7e
| <MOD_T: "mod">
Packit 1c1d7e
| <NAND_T: "nand">
Packit 1c1d7e
| <NEW_T: "new">
Packit 1c1d7e
| <NEXT_T: "next">
Packit 1c1d7e
| <NOR_T: "nor">
Packit 1c1d7e
| <NOT_T: "not">
Packit 1c1d7e
| <NULL_T: "null">
Packit 1c1d7e
| <OF_T: "of">
Packit 1c1d7e
| <ON_T: "on">
Packit 1c1d7e
| <OPEN_T: "open">
Packit 1c1d7e
| <OR_T: "or">
Packit 1c1d7e
| <OTHER_T: "others">
Packit 1c1d7e
| <OUT_T: "out">
Packit 1c1d7e
| <PACKAGE_T: "package"> {::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T);}
Packit 1c1d7e
| <PARAMETER_T: "parameter">
Packit 1c1d7e
| <PORT_T: "port"> {::vhdl::parser::VhdlParser::setLineParsed(PORT_T);}
Packit 1c1d7e
| <POSTPONED_T: "postponed">
Packit 1c1d7e
| <PROCEDURE_T: "procedure"> {::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T);}
Packit 1c1d7e
| <PROCESS_T: "process"> {::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T);}
Packit 1c1d7e
| <PROPERTY_T: "property">
Packit 1c1d7e
| <PROTECTED_T: "protected">
Packit 1c1d7e
| <PURE_T: "pure">
Packit 1c1d7e
| <RANGE_T: "range">
Packit 1c1d7e
| <RECORD_T: "record"> {::vhdl::parser::VhdlParser::setLineParsed(RECORD_T);}
Packit 1c1d7e
| <REGISTER_T: "register">
Packit 1c1d7e
| <REJECT_T: "reject">
Packit 1c1d7e
| <RELEASE_T: "release">
Packit 1c1d7e
| <RESTRICT_T: "restrict">
Packit 1c1d7e
| <RESTRICT_GUARANTEE_T: "restrict_guarantee">
Packit 1c1d7e
| <REM_T: "rem">
Packit 1c1d7e
| <REPORT_T: "report">
Packit 1c1d7e
| <ROL_T: "rol">
Packit 1c1d7e
| <ROR_T: "ror">
Packit 1c1d7e
| <RETURN_T: "return">
Packit 1c1d7e
| <SELECT_T: "select">
Packit 1c1d7e
| <SEQUENCE_T: "sequence">
Packit 1c1d7e
| <SEVERITY_T: "severity">
Packit 1c1d7e
| <SIGNAL_T: "signal"> {::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T);}
Packit 1c1d7e
| <SHARED_T: "shared">
Packit 1c1d7e
| <SLA_T: "sla">
Packit 1c1d7e
| <SLL_T: "sll">
Packit 1c1d7e
| <SRA_T: "sra">
Packit 1c1d7e
| <SRL_T: "srl">
Packit 1c1d7e
| <STRONG_T: "strong">
Packit 1c1d7e
| <SUBTYPE_T: "subtype"> {::vhdl::parser::VhdlParser::setLineParsed(SUBTYPE_T);}
Packit 1c1d7e
| <THEN_T: "then">
Packit 1c1d7e
| <TO_T: "to">
Packit 1c1d7e
| <TRANSPORT_T: "transport">
Packit 1c1d7e
| <TYPE_T: "type"> {::vhdl::parser::VhdlParser::setLineParsed(TYPE_T);}
Packit 1c1d7e
| <UNAFFECTED_T: "unaffected">
Packit 1c1d7e
| <UNITS_T: "units"> {::vhdl::parser::VhdlParser::setLineParsed(UNITS_T);}
Packit 1c1d7e
| <UNTIL_T: "until">
Packit 1c1d7e
| <USE_T: "use">
Packit 1c1d7e
| <VARIABLE_T: "variable">
Packit 1c1d7e
| <VMODE_T: "vmode">
Packit 1c1d7e
| <VPROP_T: "vprop">
Packit 1c1d7e
| <VUNIT_T: "vunit">
Packit 1c1d7e
| <WAIT_T: "wait">
Packit 1c1d7e
| <WHEN_T: "when">
Packit 1c1d7e
| <WHILE_T: "while">
Packit 1c1d7e
| <WITH_T: "with">
Packit 1c1d7e
| <XOR_T: "xor">
Packit 1c1d7e
| <XNOR_T: "xnor">
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
/* OPERATORS */
Packit 1c1d7e
Packit 1c1d7e
TOKEN :
Packit 1c1d7e
{
Packit 1c1d7e
  < AMPERSAND_T: "&" >
Packit 1c1d7e
| < APOSTROPHE_T: "'" >
Packit 1c1d7e
| < LPAREN_T: "(" >
Packit 1c1d7e
| < RPAREN_T: ")" >
Packit 1c1d7e
| < DOUBLEMULT_T: "**" >
Packit 1c1d7e
| < MULT_T: "*" >
Packit 1c1d7e
| < PLUS_T: "+" >
Packit 1c1d7e
| < MINUS_T: "-" >
Packit 1c1d7e
| < COMMA_T: "," >
Packit 1c1d7e
| < VARASSIGN_T: ":=" >
Packit 1c1d7e
| < COLON_T: ":" >
Packit 1c1d7e
| < SEMI_T: ";" >{::vhdl::parser::VhdlParser::setLineParsed(SEMI_T);}
Packit 1c1d7e
| < LESSTHAN_T: "<=" >
Packit 1c1d7e
| < GREATERTHAN_T: ">=" >
Packit 1c1d7e
| < LT_T: "<" >
Packit 1c1d7e
| < GT_T: ">" >
Packit 1c1d7e
| < EQU_T: "=" >
Packit 1c1d7e
| < NOTEQU_T: "/=" >
Packit 1c1d7e
| < ARROW_T: "=>" >
Packit 1c1d7e
| < BOX_T: "<>" >
Packit 1c1d7e
| < SLSL_T: "<<" >
Packit 1c1d7e
| < RSRS_T: ">>" >
Packit 1c1d7e
| < QQ_T: "??" >
Packit 1c1d7e
| < QGT_T: "?>=" >
Packit 1c1d7e
| < QLT_T: "?<=" >
Packit 1c1d7e
| < QG_T: "?>" >
Packit 1c1d7e
| < QL_T: "?<" >
Packit 1c1d7e
| < QEQU_T: "?=" >
Packit 1c1d7e
| < QNEQU_T: "?/=" >
Packit 1c1d7e
| < Q_T: "?" >
Packit 1c1d7e
| < BAR_T: "|" >
Packit 1c1d7e
| <DOT_T: "." >
Packit 1c1d7e
| < SLASH_T: "/" >
Packit 1c1d7e
| < AT_T: "@" >
Packit 1c1d7e
| < NEG_T: "^" >
Packit 1c1d7e
| < LBRACKET_T: "[" >
Packit 1c1d7e
| < RBRACKET_T: "]" >
Packit 1c1d7e
| < LBRACE: "{" >
Packit 1c1d7e
| < RBRACE: "}" >
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
TOKEN:
Packit 1c1d7e
{
Packit 1c1d7e
  <INTEGER: <DIGIT> ((["_"])? (<DIGIT>))* >
Packit 1c1d7e
 | <STRINGLITERAL: (( ["\""](<GRAPHIC_CHARACTER>)*) "\"")+ >
Packit 1c1d7e
 | <BASIC_IDENTIFIER:  (<LETTER> ( (["_"])* <LETTER_OR_DIGIT> )*) >
Packit 1c1d7e
 | <EXTENDED_CHARACTER: ( ["\\"](<GRAPHIC_CHARACTER>)*["\\"] ) >
Packit 1c1d7e
 | <CHARACTER_LITERAL: (["'"](<GRAPHIC_CHARACTER>|<QUOTE>)["'"]) >
Packit 1c1d7e
 | <DECIMAL_LITERAL: (<INTEGER> (["."]<INTEGER>)? (<EXPONENT>)? ) >
Packit 1c1d7e
 | <BASED_INTEGER: <LETTER_OR_DIGIT>( <LETTER_OR_DIGIT>)* >
Packit 1c1d7e
 | <BASED_LITERAL: <INTEGER>["#"]<BASED_INTEGER>(["."] <BASED_INTEGER>)? ["#"] (<EXPONENT>)? >
Packit 1c1d7e
 | <#EXPONENT: (["e","E"] (["+","-"])? (<INTEGER>)+) >
Packit 1c1d7e
 | < #BASIC_GRAPHIC_CHARACTER:    (<UPPER_CASE_LETTER>|<DIGIT>|<SPECIAL_CHARACTER>|<SPACE_CHARACTER>) >
Packit 1c1d7e
 | < #GRAPHIC_CHARACTER: ( <BASIC_GRAPHIC_CHARACTER>|<LOWER_CASE_LETTER>|<OTHER_SPECIAL_CHARACTER> ) >
Packit 1c1d7e
 | < #LETTER_OR_DIGIT: ( <LETTER> | <DIGIT> ) >
Packit 1c1d7e
 | < #LETTER_OR_DIGIT_OR_STD: (<LETTER_OR_DIGIT> | <STD_LOGIC> ) >
Packit 1c1d7e
 | < #LETTER: (<UPPER_CASE_LETTER>|<LOWER_CASE_LETTER>) >
Packit 1c1d7e
 | < #UPPER_CASE_LETTER: ["A"-"Z"]  >
Packit 1c1d7e
 | <BIT_STRING_LITERAL : (<DIGIT>)*<BASE_SPECIFIER>["\""](<LETTER_OR_DIGIT_OR_STD>((["_"])*<LETTER_OR_DIGIT_OR_STD>)*)["\""] >
Packit 1c1d7e
 | <#BASE_SPECIFIER:["B","O","X","b","o","x","d","D"]>
Packit 1c1d7e
 | <#STD_LOGIC:["0","1","L","H","X","Z","W","-","l","h","x","z","w"]>
Packit 1c1d7e
 | < #DIGIT: ["0"-"9"] >
Packit 1c1d7e
 | < #SPECIAL_CHARACTER: ["#","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","_","|"] >
Packit 1c1d7e
 | < #OTHER_SPECIAL_CHARACTER: ["%","!","$","@","?","[","\\","]","^","`","{","}","~","\u00A0"-"\u00FF"]>
Packit 1c1d7e
 | < #SPACE_CHARACTER: [" ","\t"] >
Packit 1c1d7e
 | < #LOWER_CASE_LETTER: ["a"-"z"] >
Packit 1c1d7e
 | < #QUOTE: ["\""] >
Packit 1c1d7e
 | <VHDL2008TOOLDIR  : ["`"](<GRAPHIC_CHARACTER>|<STRINGLITERAL>)+ >
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString abstract_literal() :
Packit 1c1d7e
{Token *tok;}
Packit 1c1d7e
{
Packit 1c1d7e
   tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
Packit 1c1d7e
 | tok=<INTEGER>         { return tok->image.c_str(); }
Packit 1c1d7e
 | tok=<BASED_LITERAL>   { return tok->image.c_str(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString access_type_definition() :
Packit 1c1d7e
{Token *tok=0;QCString str,str1;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<ACCESS_T> str1=subtype_indication() { str=tok->image.c_str(); return str+str1; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString actual_designator() :
Packit 1c1d7e
{QCString str;Token *t=0;}
Packit 1c1d7e
{
Packit 1c1d7e
t=<OPEN_T> { return t->image.c_str(); }
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(expression())
Packit 1c1d7e
  str=expression() { return str; }
Packit 1c1d7e
|
Packit 1c1d7e
  LOOKAHEAD(name())
Packit 1c1d7e
 str=name() { return str; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString actual_parameter_part() :
Packit 1c1d7e
{QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
   s=association_list() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString actual_part() :
Packit 1c1d7e
{QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 LOOKAHEAD(actual_designator())
Packit 1c1d7e
 s=actual_designator() { return s;}
Packit 1c1d7e
 |
Packit 1c1d7e
   <BOX_T> { return "<>";}
Packit 1c1d7e
 |
Packit 1c1d7e
 s=name() <LPAREN_T> s1=actual_designator() <RPAREN_T> {s+="(";s+=s1+")";return s;}
Packit 1c1d7e
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString adding_operator () :
Packit 1c1d7e
{}
Packit 1c1d7e
{
Packit 1c1d7e
  <PLUS_T> { return "+";}
Packit 1c1d7e
  | <MINUS_T> { return "-";}
Packit 1c1d7e
  |<AMPERSAND_T> { return "&";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString aggregate() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
  <LPAREN_T> s=element_association() (<COMMA_T> s1=element_association(){s+=","+s1;})* <RPAREN_T> { return "("+s+")";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString alias_declaration() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 <ALIAS_T> s2=alias_designator()
Packit 1c1d7e
 [ <COLON_T>{ s+=":"; } s1=subtype_indication() { s+=s1; }]
Packit 1c1d7e
 <IS_T> { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}]
Packit 1c1d7e
 <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
 addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public);
Packit 1c1d7e
Packit 1c1d7e
 return s2+" "+s+";";
Packit 1c1d7e
}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString alias_designator()  : {Token *tok=0;QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=identifier() { return s;}
Packit 1c1d7e
 | tok=<CHARACTER_LITERAL> { return tok->image.c_str(); }
Packit 1c1d7e
 | s=operator_symbol() { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void allocator()  :{}
Packit 1c1d7e
{
Packit 1c1d7e
 LOOKAHEAD(3)
Packit 1c1d7e
 <NEW_T> qualified_expression()
Packit 1c1d7e
 |  <NEW_T>  subtype_indication()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void architecture_body() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
    <ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
Packit 1c1d7e
    {
Packit 1c1d7e
                  QCString t=s1+"::"+s;
Packit 1c1d7e
                  genLabels.resize(0);
Packit 1c1d7e
                  pushLabel(genLabels,s1);
Packit 1c1d7e
                  lastCompound=current;
Packit 1c1d7e
                  addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
Packit 1c1d7e
    }
Packit 1c1d7e
   try{
Packit 1c1d7e
   architecture_declarative_part()
Packit 1c1d7e
    }catch(...){error_skipto(BEGIN_T);}
Packit 1c1d7e
   <BEGIN_T>
Packit 1c1d7e
   architecture_statement_part()
Packit 1c1d7e
  <END_T> [<ARCHITECTURE_T>] [name()] <SEMI_T>
Packit 1c1d7e
   { lastEntity=0;lastCompound=0; genLabels.resize(0); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void architecture_declarative_part() : {}
Packit 1c1d7e
{
Packit 1c1d7e
  (block_declarative_item() )*
Packit 1c1d7e
 // | (<VHDL2008TOOLDIR>)
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void architecture_statement_part() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  (concurrent_statement())*
Packit 1c1d7e
 // | (<VHDL2008TOOLDIR>)
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString array_type_definition ():  { QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
 LOOKAHEAD(unconstraint_array_definition())
Packit 1c1d7e
Packit 1c1d7e
  s=unconstraint_array_definition() {return s;}
Packit 1c1d7e
  | s=constraint_array_definition()  {return s;}
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString assertion() :  {QCString s,s1,s2;Token *t=0;Token *t1=0;}
Packit 1c1d7e
{
Packit 1c1d7e
   <ASSERT_T> s=condition() [ t=<REPORT_T> s1=expression() ] [t1=<SEVERITY_T> s2=expression()]
Packit 1c1d7e
 {
Packit 1c1d7e
   s.prepend("assert ");
Packit 1c1d7e
   if(t) s1.prepend(" report ");
Packit 1c1d7e
   if(t1) s2.prepend(" report ");
Packit 1c1d7e
    return s+s1+s2;
Packit 1c1d7e
 }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString assertion_statement() :  {QCString s,s1,s2;Token *t=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  [ s=label() t=<COLON_T> ] s1=assertion() <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
    if(t) s+=":";
Packit 1c1d7e
    return s+s1+";";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
QCString association_element() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 [LOOKAHEAD(formal_part() <ARROW_T>) s=formal_part() <ARROW_T> ] s1=actual_part()
Packit 1c1d7e
 { return s+" => "+s1;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString association_list ():  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=association_element() (<COMMA_T> s1=association_element() { s+=","+s1; })* { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString attribute_declaration() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 <ATTRIBUTE_T> s=identifier() <COLON_T> s1=type_mark() <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
    addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
Packit 1c1d7e
    return " attribute "+s+":"+s1+";";
Packit 1c1d7e
  }
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString attribute_designator (): {QCString s;Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=identifier() { return s;}
Packit 1c1d7e
  | tok=<RANGE_T> { return tok->image.c_str(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString attribute_name (): {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=identifier() <APOSTROPHE_T> s1=name(){ s+="'"+s1; }[LOOKAHEAD(1)<LPAREN_T>s1=expression() <RPAREN_T> {s+"("+s1+")";}] { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString attribute_specification():  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
  <ATTRIBUTE_T> s=attribute_designator() <OF_T> s1=entity_specification() <IS_T> s2=expression() <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
   QCString t= s1+" is "+s2;
Packit 1c1d7e
   addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public);
Packit 1c1d7e
   return " attribute "+s+" of "+s1+ " is "+s2+";";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString base() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<INTEGER> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString base_specifier ():  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
   tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString base_unit_declaration() :
Packit 1c1d7e
{QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=identifier() { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString based_integer() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString based_literal():  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
 tok=<BASED_LITERAL> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString basic_identifier() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void binding_indication() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 [ <USE_T> entity_aspect() ]
Packit 1c1d7e
 [ generic_map_aspect() ]
Packit 1c1d7e
 [ port_map_aspect() ]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString bit_string_literal ():  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<BIT_STRING_LITERAL> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString bit_value() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void block_configuration() : {}
Packit 1c1d7e
{
Packit 1c1d7e
    <FOR_T> block_specification()
Packit 1c1d7e
        ( use_clause() )*
Packit 1c1d7e
        ( configuration_item())*
Packit 1c1d7e
    <END_T> <FOR_T> <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void block_declarative_item ():  {}
Packit 1c1d7e
{
Packit 1c1d7e
  subprogram_declaration()
Packit 1c1d7e
//| subprogram_body()
Packit 1c1d7e
| type_declaration()
Packit 1c1d7e
| subtype_declaration()
Packit 1c1d7e
| constant_declaration()
Packit 1c1d7e
| signal_declaration()
Packit 1c1d7e
| variable_declaration()
Packit 1c1d7e
| file_declaration()
Packit 1c1d7e
| alias_declaration()
Packit 1c1d7e
| component_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(attribute_declaration())
Packit 1c1d7e
attribute_declaration()
Packit 1c1d7e
| attribute_specification()
Packit 1c1d7e
| configuration_specification()
Packit 1c1d7e
| disconnection_specification ()
Packit 1c1d7e
| use_clause()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
group_template_declaration()
Packit 1c1d7e
| group_declaration()
Packit 1c1d7e
//| <VHDL2008TOOLDIR>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void block_declarative_part() : {}
Packit 1c1d7e
{
Packit 1c1d7e
   (block_declarative_item() )*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void block_header() : {}
Packit 1c1d7e
{
Packit 1c1d7e
[LOOKAHEAD(generic_clause()) generic_clause()[ generic_map_aspect() <SEMI_T> ] ]
Packit 1c1d7e
[ port_clause() [ port_map_aspect() <SEMI_T> ] ]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void block_specification() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  name()[LOOKAHEAD(1) <LPAREN_T> index_specification() <RPAREN_T>]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void block_statement() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=identifier() <COLON_T>
Packit 1c1d7e
        <BLOCK_T> { pushLabel(genLabels,s); }[ <LPAREN_T> expression() <RPAREN_T> ] [ <IS_T> ]
Packit 1c1d7e
            block_header()
Packit 1c1d7e
            block_declarative_part()
Packit 1c1d7e
            <BEGIN_T>
Packit 1c1d7e
            block_statement_part()
Packit 1c1d7e
            <END_T> <BLOCK_T> [ identifier() ] <SEMI_T>
Packit 1c1d7e
            {
Packit 1c1d7e
              genLabels=popLabel(genLabels);
Packit 1c1d7e
            }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void block_statement_part() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  ( concurrent_statement() )*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void  case_statement() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
[ identifier() <COLON_T> ]
Packit 1c1d7e
  <CASE_T> s=expression()
Packit 1c1d7e
    {
Packit 1c1d7e
     QCString ca="case "+s;
Packit 1c1d7e
     FlowChart::addFlowChart(FlowChart::CASE_NO,0,ca);
Packit 1c1d7e
    }
Packit 1c1d7e
  <IS_T>
Packit 1c1d7e
        case_statement_alternative()
Packit 1c1d7e
        ( case_statement_alternative ())*
Packit 1c1d7e
        <END_T> <CASE_T> [ identifier() ] <SEMI_T>
Packit 1c1d7e
        {
Packit 1c1d7e
         FlowChart::moveToPrevLevel();
Packit 1c1d7e
         FlowChart::addFlowChart(FlowChart::END_CASE,"end case",0);
Packit 1c1d7e
          }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void case_statement_alternative() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  <WHEN_T> s=choices() <ARROW_T>
Packit 1c1d7e
   {
Packit 1c1d7e
    QCString t="when ";
Packit 1c1d7e
    t+=s+"=> ";
Packit 1c1d7e
    FlowChart::addFlowChart(FlowChart::WHEN_NO,s.data(),t);
Packit 1c1d7e
    }
Packit 1c1d7e
  sequence_of_statement(){FlowChart::moveToPrevLevel(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString character_literal() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<CHARACTER_LITERAL>{ return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString choice() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  LOOKAHEAD(discrete_range())
Packit 1c1d7e
  s=discrete_range(){ return s; }
Packit 1c1d7e
  |
Packit 1c1d7e
   LOOKAHEAD(simple_expression())
Packit 1c1d7e
   s=simple_expression(){ return s; }
Packit 1c1d7e
  |
Packit 1c1d7e
  LOOKAHEAD(identifier())
Packit 1c1d7e
  s=identifier(){ return s; }
Packit 1c1d7e
  | <OTHER_T> { return " others "; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString choices() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=choice() (<BAR_T> s1=choice(){s+="|";s+=s1;})* { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void component_configuration () :{}
Packit 1c1d7e
{
Packit 1c1d7e
    <FOR_T> component_specification()
Packit 1c1d7e
        [ binding_indication() <SEMI_T> ]
Packit 1c1d7e
        [ block_configuration() ]
Packit 1c1d7e
    <END_T> <FOR_T> <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
void component_declaration() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 <COMPONENT_T> s=identifier() [ <IS_T> ]
Packit 1c1d7e
   { currP=VhdlDocGen::COMPONENT; }
Packit 1c1d7e
  [ generic_clause() ]
Packit 1c1d7e
  [ port_clause() ]
Packit 1c1d7e
   {
Packit 1c1d7e
     addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0,Public);
Packit 1c1d7e
     currP=0;
Packit 1c1d7e
  }
Packit 1c1d7e
  <END_T> <COMPONENT_T> [ identifier() ] <SEMI_T>
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void component_instantiation_statement() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
s=identifier() <COLON_T>
Packit 1c1d7e
 s1=instantiation_unit()
Packit 1c1d7e
 {
Packit 1c1d7e
       QCString s3;
Packit 1c1d7e
       if (s1.contains("|")) {
Packit 1c1d7e
         s3=VhdlDocGen::getIndexWord(s1.data(),0);
Packit 1c1d7e
         s1=VhdlDocGen::getIndexWord(s1.data(),1);
Packit 1c1d7e
       }
Packit 1c1d7e
Packit 1c1d7e
       addCompInst(s.lower().data(),s1.lower().data(),s3.data(),getLine());
Packit 1c1d7e
 }
Packit 1c1d7e
        [ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ]
Packit 1c1d7e
        [ port_map_aspect() ] <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void component_specification() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
instantiation_list() <COLON_T> name()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString composite_type_definition() :  { QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=array_type_definition(){ return s; }
Packit 1c1d7e
| record_type_definition(){ return s+"#"; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void concurrent_assertion_statement() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
[  LOOKAHEAD(2) identifier() <COLON_T> ] [  <POSTPONED_T> ] assertion() <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void concurrent_procedure_call_statement() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
[  LOOKAHEAD(2) identifier() <COLON_T> ] [ <POSTPONED_T> ] procedure_call() <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void concurrent_signal_assignment_statement() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
[ LOOKAHEAD(2) identifier() <COLON_T> ] [<POSTPONED_T> ]
Packit 1c1d7e
(
Packit 1c1d7e
LOOKAHEAD(conditional_signal_assignment() )
Packit 1c1d7e
 conditional_signal_assignment()
Packit 1c1d7e
| selected_signal_assignment()
Packit 1c1d7e
Packit 1c1d7e
)
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void concurrent_statement() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
// try {
Packit 1c1d7e
LOOKAHEAD([identifier() ":"] <BLOCK_T>)
Packit 1c1d7e
block_statement()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <PROCESS_T>)
Packit 1c1d7e
process_statement()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(generate_statement())
Packit 1c1d7e
generate_statement()
Packit 1c1d7e
|
Packit 1c1d7e
case_scheme()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <ASSERT_T>)
Packit 1c1d7e
concurrent_assertion_statement()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(concurrent_signal_assignment_statement())
Packit 1c1d7e
    concurrent_signal_assignment_statement()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(component_instantiation_statement() )
Packit 1c1d7e
component_instantiation_statement()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(concurrent_procedure_call_statement())
Packit 1c1d7e
concurrent_procedure_call_statement()
Packit 1c1d7e
| <VHDL2008TOOLDIR>
Packit 1c1d7e
 /*
Packit 1c1d7e
  catch( ParseException e )
Packit 1c1d7e
  {
Packit 1c1d7e
    error_skipto(SEMI_T, "syntax error in declarative item");
Packit 1c1d7e
  }
Packit 1c1d7e
 */
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString condition() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=expression() { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString condition_clause() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  <UNTIL_T> s=condition()
Packit 1c1d7e
  {
Packit 1c1d7e
    return " until "+s;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void conditional_signal_assignment() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  // LOOKAHEAD(  target() "<=" options_() conditional_waveforms() ";")
Packit 1c1d7e
 target() <LESSTHAN_T> options() conditional_waveforms() <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void conditional_waveforms() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
waveform()
Packit 1c1d7e
    ( LOOKAHEAD(<WHEN_T> condition() <ELSE_T>)
Packit 1c1d7e
       <WHEN_T> condition() <ELSE_T> waveform() )*
Packit 1c1d7e
    [ <WHEN_T> condition() ]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// ( waveform() < WHEN_T> condition() <ELSE_T> )*
Packit 1c1d7e
//   waveform() [ <WHEN_T> condition() ]
Packit 1c1d7e
Packit 1c1d7e
//waveform()
Packit 1c1d7e
 //   ( LOOKAHEAD( <WHEN> condition() <ELSE>)
Packit 1c1d7e
    //    <WHEN> condition() <ELSE> waveform() )*
Packit 1c1d7e
    //[ <WHEN> condition() ]
Packit 1c1d7e
Packit 1c1d7e
void configuration_declaration() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 <CONFIGURATION_T> s=identifier() <OF_T> s1=name() <IS_T>
Packit 1c1d7e
  {
Packit 1c1d7e
Packit 1c1d7e
  confName=s+"::"+s1;
Packit 1c1d7e
  addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public);
Packit 1c1d7e
  }
Packit 1c1d7e
    configuration_declarative_part()
Packit 1c1d7e
    block_configuration()
Packit 1c1d7e
 <END_T> [ <CONFIGURATION_T> ] [ name() ] <SEMI_T>
Packit 1c1d7e
 { genLabels.resize(0); confName="";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void configuration_declarative_item() : {}
Packit 1c1d7e
{
Packit 1c1d7e
 use_clause()
Packit 1c1d7e
| attribute_specification()
Packit 1c1d7e
| group_declaration()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void configuration_declarative_part() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 (configuration_declarative_item())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void configuration_item ():  {}
Packit 1c1d7e
{
Packit 1c1d7e
 LOOKAHEAD(component_configuration())
Packit 1c1d7e
 component_configuration()
Packit 1c1d7e
 | block_configuration()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void configuration_specification() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
<FOR_T> component_specification() binding_indication() <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString constant_declaration() :  {QCString s,s1,s2;Token *t=0;}
Packit 1c1d7e
{
Packit 1c1d7e
   <CONSTANT_T> s=identifier_list() <COLON_T> s1= subtype_indication() [ t=<VARASSIGN_T> s2=expression() ] <SEMI_T>
Packit 1c1d7e
    {
Packit 1c1d7e
     if(t)
Packit 1c1d7e
      s2.prepend(":=");
Packit 1c1d7e
     QCString it=s1+s2;
Packit 1c1d7e
     addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public);
Packit 1c1d7e
     it.prepend("constant ");
Packit 1c1d7e
     return it;
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString constraint_array_definition (): {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
<ARRAY_T> s=index_constraint() <OF_T> s1=subtype_indication(){ return s+" "+s1;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void context_clause (): {}
Packit 1c1d7e
{
Packit 1c1d7e
 (context_item())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString constraint () :{QCString s;}
Packit 1c1d7e
 {
Packit 1c1d7e
    LOOKAHEAD(range_constraint())
Packit 1c1d7e
    s=range_constraint(){ return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(index_constraint())
Packit 1c1d7e
     s=index_constraint(){ return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void context_item() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 library_clause()
Packit 1c1d7e
| use_clause()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString decimal_literal() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
 tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString delay_mechanism ():  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
<TRANSPORT_T> { return " transport ";}
Packit 1c1d7e
| [ <REJECT_T> s=expression() {s.prepend(" reject ");}] <INERTIAL_T> { return s+" inertial "; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void design_file() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  (design_unit() )+  {}
Packit 1c1d7e
  | <EOF>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void design_unit() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 context_clause()library_unit()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString designator() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=identifier()          {return s;}
Packit 1c1d7e
 | s=operator_symbol(){return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString direction ():  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
tok=<TO_T>  { return tok->image.c_str();}
Packit 1c1d7e
| tok=<DOWNTO_T> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void disconnection_specification() : {}
Packit 1c1d7e
{
Packit 1c1d7e
<DISCONNECT_T> guarded_signal_specificatio() <AFTER_T> expression() <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void guarded_signal_specificatio() : {}
Packit 1c1d7e
{
Packit 1c1d7e
 signal_list() <COLON_T> name()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString discrete_range() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  LOOKAHEAD(range())
Packit 1c1d7e
  s=range() { return s;}
Packit 1c1d7e
  |
Packit 1c1d7e
  LOOKAHEAD(subtype_indication())
Packit 1c1d7e
   s=subtype_indication() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString element_association() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
[LOOKAHEAD(choices() <ARROW_T>) s=choices() <ARROW_T> ]  s1=expression()
Packit 1c1d7e
 {
Packit 1c1d7e
if(!s.isEmpty())
Packit 1c1d7e
 return s+"=>"+s1;
Packit 1c1d7e
return s1;
Packit 1c1d7e
 }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString element_declaration() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=identifier_list() <COLON_T> s1=subtype_indication() <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
  addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s1.data(),Public);
Packit 1c1d7e
  //addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
Packit 1c1d7e
  return s+":"+s1;
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString entity_aspect() :  {Token *tok=0;QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
tok=<ENTITY_T> s=name() [ LOOKAHEAD(1)<LPAREN_T> s1=identifier() <RPAREN_T> {s+="("+s1+")";} ] { return s;}
Packit 1c1d7e
| tok=<CONFIGURATION_T> s=name() { return tok->image.c_str()+s;}
Packit 1c1d7e
| tok=<OPEN_T> { return tok->image.c_str(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString entity_class() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
<ENTITY_T> { return "entity";}
Packit 1c1d7e
| <ARCHITECTURE_T> {return "architecture";}
Packit 1c1d7e
| <CONFIGURATION_T> {return "configuration";}
Packit 1c1d7e
| <PROCEDURE_T> {return "procedure";}
Packit 1c1d7e
| <FUNCTION_T> {return "function";}
Packit 1c1d7e
| <PACKAGE_T> {return "package";}
Packit 1c1d7e
| <TYPE_T> {return "type";}
Packit 1c1d7e
| <SUBTYPE_T> {return "subtype";}
Packit 1c1d7e
| <CONSTANT_T> {return "constant";}
Packit 1c1d7e
| <SIGNAL_T> {return "signal";}
Packit 1c1d7e
| <VARIABLE_T> {return "variable";}
Packit 1c1d7e
| <COMPONENT_T> {return "component";}
Packit 1c1d7e
| <LABEL_T> {return "label";}
Packit 1c1d7e
| <LITERAL_T> {return "literal";}
Packit 1c1d7e
| <UNITS_T> {return "units";}
Packit 1c1d7e
| <GROUP_T> {return "group";}
Packit 1c1d7e
| <FILE_T>  {return "file";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString entity_class_entry() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=entity_class() [ <BOX_T> {s+="<>";} ] { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString entity_class_entry_list() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 ( s1=entity_class_entry() {s+=s1;} )(<COMMA_T> s=entity_class_entry(){s2+=",";s2+=s;}  )* { return s1+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void entity_declaration() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
   // try{
Packit 1c1d7e
    <ENTITY_T> s=identifier()  <IS_T>
Packit 1c1d7e
             {
Packit 1c1d7e
                lastEntity=current;
Packit 1c1d7e
                lastCompound=0;
Packit 1c1d7e
                addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
Packit 1c1d7e
               }
Packit 1c1d7e
        entity_header()
Packit 1c1d7e
        entity_declarative_part ()
Packit 1c1d7e
      [ <BEGIN_T> entity_statement_part() ]
Packit 1c1d7e
       <END_T> [ <ENTITY_T> ] [ name() ]
Packit 1c1d7e
     //    }catch(...){error_skipto(SEMI_T);}
Packit 1c1d7e
     <SEMI_T>
Packit 1c1d7e
     { lastEntity=0;lastCompound=0; genLabels.resize(0); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void entity_declarative_item() : {}
Packit 1c1d7e
{
Packit 1c1d7e
subprogram_declaration()
Packit 1c1d7e
//| subprogram_body()
Packit 1c1d7e
| type_declaration()
Packit 1c1d7e
| subtype_declaration()
Packit 1c1d7e
| constant_declaration()
Packit 1c1d7e
| signal_declaration()
Packit 1c1d7e
| variable_declaration()
Packit 1c1d7e
| file_declaration()
Packit 1c1d7e
| alias_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(attribute_declaration())
Packit 1c1d7e
attribute_declaration()
Packit 1c1d7e
| attribute_specification()
Packit 1c1d7e
| disconnection_specification()
Packit 1c1d7e
| use_clause()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
group_template_declaration()
Packit 1c1d7e
| group_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(5)
Packit 1c1d7e
 package_instantiation_declaration()
Packit 1c1d7e
|package_declaration()
Packit 1c1d7e
| <VHDL2008TOOLDIR>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void entity_declarative_part() : {}
Packit 1c1d7e
{
Packit 1c1d7e
  (entity_declarative_item() )*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString entity_designator() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=entity_tag() [ s1=signature() ] { return s+s1;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void entity_header() : {}
Packit 1c1d7e
{
Packit 1c1d7e
 [  { currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC; } generic_clause()]
Packit 1c1d7e
 [ { currP=VhdlDocGen::PORT; } port_clause()]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString entity_name_list() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
(s1=entity_designator() {s+=s1;})+ { return s;}
Packit 1c1d7e
| <OTHER_T> { return "other";}
Packit 1c1d7e
| <ALL_T> {return "all";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString entity_specification() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=entity_name_list() <COLON_T> s1=entity_class(){ return s+":"+s1;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void entity_statement() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
LOOKAHEAD(concurrent_assertion_statement())
Packit 1c1d7e
concurrent_assertion_statement()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(process_statement())
Packit 1c1d7e
 process_statement()
Packit 1c1d7e
| concurrent_procedure_call_statement()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void entity_statement_part() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 (entity_statement())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString entity_tag ():  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
s=name() { return s;}
Packit 1c1d7e
| s=character_literal() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString enumeration_literal() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=identifier() { return s;}
Packit 1c1d7e
 | s=character_literal() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString enumeration_type_definition() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
  <LPAREN_T>s=enumeration_literal() (LOOKAHEAD(1)<COMMA_T> s1=enumeration_literal() {s+=",";s+=s1;} )* <RPAREN_T>
Packit 1c1d7e
  { return "("+s+")";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString exit_statement() :  {QCString s,s1,s2;Token *t=0;Token *t1=0;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=identifier() t=<COLON_T> ] <EXIT_T> [ s1=identifier() ]
Packit 1c1d7e
[ t1=<WHEN_T> s2=condition() ] <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
  lab.resize(0);
Packit 1c1d7e
  if(t) s+=":";
Packit 1c1d7e
  if(t1) s2.prepend(" when ");
Packit 1c1d7e
   FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data());
Packit 1c1d7e
Packit 1c1d7e
  return s+s1+s2+";";
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString expression ():  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
s=relation() ( s1=logop() s2=relation() {s+=s1;s+=s2;} )*
Packit 1c1d7e
{ return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString logop() : {}
Packit 1c1d7e
{
Packit 1c1d7e
  <AND_T> { return "and" ;}
Packit 1c1d7e
  |<NAND_T> { return "nand" ;}
Packit 1c1d7e
  |<NOR_T> { return "nor" ;}
Packit 1c1d7e
  |<XNOR_T> { return "xnor" ;}
Packit 1c1d7e
  |<XOR_T> { return "xor" ;}
Packit 1c1d7e
  |<OR_T> { return "or" ;}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString extended_identifier ():  {Token *t;}
Packit 1c1d7e
{
Packit 1c1d7e
 t=<EXTENDED_CHARACTER> { return t->image.c_str(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString factor():  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=primary() [LOOKAHEAD(1) <DOUBLEMULT_T> s1=primary(){ s+="**";s+=s1;} ] { return s;}
Packit 1c1d7e
| <ABS_T> s=primary(){ s1 = "abs "; return s1+s; }
Packit 1c1d7e
| <NOT_T>  s=primary(){s1="not ";return s1+s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString file_declaration() :  {QCString s,s1,s2,s3;}
Packit 1c1d7e
{
Packit 1c1d7e
 <FILE_T> s=identifier_list() <COLON_T> s2=subtype_indication() [ s3=file_open_information() ] <SEMI_T>
Packit 1c1d7e
   {
Packit 1c1d7e
   QCString t1=s2+" "+s3;
Packit 1c1d7e
   addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);
Packit 1c1d7e
   return " file "+s+":"+s2+" "+s3+";";
Packit 1c1d7e
   }
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString  file_logical_name():  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=expression() { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString file_open_information() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 [ <OPEN_T> s=expression() ] <IS_T> s1=file_logical_name() {s2="open "+s+" is "+s1;  return s2; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString file_type_definition() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 <FILE_T> <OF_T> s=type_mark() { s1=" file of "+s; return s1;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString floating_type_definition() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=range_constraint(){ return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString formal_designator() : {QCString s;Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
    s=name()  { return s; }
Packit 1c1d7e
    |tok=<INTEGER> { return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString formal_parameter_list() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=interface_list(){ return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString formal_part() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=name() [<LPAREN_T> formal_designator() <RPAREN_T> {s+"("+s1+")";}] {return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString full_type_declaration() :  {Entry *tmpEntry;QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
<TYPE_T> s=identifier() <IS_T>
Packit 1c1d7e
{
Packit 1c1d7e
  tmpEntry=current;
Packit 1c1d7e
  addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,0,Public);
Packit 1c1d7e
}
Packit 1c1d7e
 try{
Packit 1c1d7e
     s2=type_definition()
Packit 1c1d7e
       }catch(...){error_skipto(SEMI_T);}
Packit 1c1d7e
     <SEMI_T>
Packit 1c1d7e
     {
Packit 1c1d7e
      if (s2.contains("#")) {
Packit 1c1d7e
        VhdlDocGen::deleteAllChars(s2,'#');
Packit 1c1d7e
        tmpEntry->spec=VhdlDocGen::RECORD;
Packit 1c1d7e
        tmpEntry->type=s2.data();
Packit 1c1d7e
        //addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s2.data(),Public);
Packit 1c1d7e
      }
Packit 1c1d7e
      else if (s2.contains("%")) {
Packit 1c1d7e
        VhdlDocGen::deleteAllChars(s2,'%');
Packit 1c1d7e
        tmpEntry->spec=VhdlDocGen::UNITS;
Packit 1c1d7e
        tmpEntry->type=s2.data();
Packit 1c1d7e
        //addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,s2.data(),s2.data(),Public);
Packit 1c1d7e
      }
Packit 1c1d7e
      else {
Packit 1c1d7e
        tmpEntry->spec=VhdlDocGen::TYPE;
Packit 1c1d7e
        tmpEntry->type=s2.data();
Packit 1c1d7e
        //addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
Packit 1c1d7e
      }
Packit 1c1d7e
      tmpEntry=0;
Packit 1c1d7e
      return "type "+s+" is "+s2+";";
Packit 1c1d7e
     }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString function_call() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=name()  <LPAREN_T> s1=actual_parameter_part()  <RPAREN_T> { return s+"("+s1+")";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void generate_statement() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
s=identifier() <COLON_T>
Packit 1c1d7e
          try{
Packit 1c1d7e
        generate_scheme() <GENERATE_T>
Packit 1c1d7e
        { pushLabel(genLabels,s); }
Packit 1c1d7e
          generate_statement_body1()
Packit 1c1d7e
        <END_T>
Packit 1c1d7e
                 }catch(...){error_skipto(GENERATE_T);}
Packit 1c1d7e
        <GENERATE_T> [ identifier() ] <SEMI_T> {genLabels=popLabel(genLabels); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void generate_scheme() : {}
Packit 1c1d7e
{
Packit 1c1d7e
<FOR_T> parameter_specification()
Packit 1c1d7e
| <IF_T> condition()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void generic_clause() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 <GENERIC_T>  <LPAREN_T> { parse_sec=GEN_SEC; } s=generic_list() <RPAREN_T> <SEMI_T> { parse_sec=0; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString generic_list() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=interface_list() { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void generic_map_aspect() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
     <GENERIC_T> <MAP_T> <LPAREN_T> association_list() <RPAREN_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString group_constituent() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=name() { return s; }
Packit 1c1d7e
 | s=character_literal() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString group_constituent_list() : {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
  (s1=group_constituent())(<COMMA_T> s=group_constituent(){s2+=",";s2+=s1;})* { return s+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString group_declaration() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
  <GROUP_T> s=identifier() <COLON_T> s1=identifier() <LPAREN_T> s2=group_constituent_list() <RPAREN_T> <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
   return "group "+s+":"+s1+"("+s2+");";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString group_template_declaration() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 <GROUP_T> s=identifier() <IS_T> <LPAREN_T> s1=entity_class_entry_list() <RPAREN_T> <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
    return "group "+s+ "is ("+s1+");";
Packit 1c1d7e
  }
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
void guarded_signal_specification() : {}
Packit 1c1d7e
{
Packit 1c1d7e
 signal_list() <COLON_T> type_mark()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString identifier() : {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  tok=<EXTENDED_CHARACTER>{ return tok->image.c_str(); }
Packit 1c1d7e
  |tok=<BASIC_IDENTIFIER> { return tok->image.c_str(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString identifier_list() : {QCString str,str1;}
Packit 1c1d7e
{
Packit 1c1d7e
   str=identifier() (<COMMA_T> str1=identifier() {str+=",";str+=str1;})* { return str; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void if_statement() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
[LOOKAHEAD(1) identifier() <COLON_T> ]
Packit 1c1d7e
    <IF_T> s=condition() <THEN_T>
Packit 1c1d7e
    {
Packit 1c1d7e
    s.prepend("if ");
Packit 1c1d7e
    FlowChart::addFlowChart(FlowChart::IF_NO,0,s);
Packit 1c1d7e
  }
Packit 1c1d7e
        sequence_of_statement()
Packit 1c1d7e
        (
Packit 1c1d7e
          <ELSIF_T> s1=condition() <THEN_T>
Packit 1c1d7e
          {
Packit 1c1d7e
           s1.prepend("elsif ");
Packit 1c1d7e
           FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data());
Packit 1c1d7e
          }
Packit 1c1d7e
          sequence_of_statement()
Packit 1c1d7e
        )*
Packit 1c1d7e
        [LOOKAHEAD(1) <ELSE_T>
Packit 1c1d7e
         {
Packit 1c1d7e
           FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
Packit 1c1d7e
         }
Packit 1c1d7e
        sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T>
Packit 1c1d7e
         {
Packit 1c1d7e
          FlowChart::moveToPrevLevel();
Packit 1c1d7e
          FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0);
Packit 1c1d7e
        }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString incomplete_type_declaration() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  <TYPE_T> s=identifier() <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
   return "type "+s+";";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString index_constraint() :  {QCString s="("; QCString s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
  //try{
Packit 1c1d7e
  <LPAREN_T> s2=discrete_range(){s+=s2;}(LOOKAHEAD(1)<COMMA_T> s1=discrete_range(){s+=",";s+=s1;})*  <RPAREN_T> {return s+")";}
Packit 1c1d7e
//}catch(...){  error_skipto(SEMI_T);hasError=false;return "";}
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
QCString index_specification() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 LOOKAHEAD( discrete_range())
Packit 1c1d7e
 s=discrete_range() { return s;}
Packit 1c1d7e
| s=expression(){ return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString index_subtype_definition() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=type_mark() <RANGE_T> <BOX_T> { return s+" range <> ";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString instantiation_unit() :  {QCString s,s1,s2;Token *tok;}
Packit 1c1d7e
{
Packit 1c1d7e
[ <COMPONENT_T> ] s=identifier() {s1="component "; return s; }
Packit 1c1d7e
| <ENTITY_T>  [LOOKAHEAD(2)<BASIC_IDENTIFIER> <DOT_T>] s2=name() {s="entity|"+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;}
Packit 1c1d7e
| <CONFIGURATION_T> s=name() {s1="configuration ";return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString instantiation_list() : {QCString s;Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=identifier_list() { return s;}
Packit 1c1d7e
| tok=<OTHER_T> {return tok->image.c_str();}
Packit 1c1d7e
| tok=<ALL_T> {return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString integer() :  {Token *t;}
Packit 1c1d7e
{
Packit 1c1d7e
  t=<INTEGER> {return t->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString integer_type_definition() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=range_constraint(){ return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString interface_declaration() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
LOOKAHEAD(5)
Packit 1c1d7e
 s=interface_subprogram_declaration() { return s;}
Packit 1c1d7e
Packit 1c1d7e
|interface_package_declaration() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
 LOOKAHEAD(5)
Packit 1c1d7e
 s=interface_variable_declaration() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(5)
Packit 1c1d7e
interface_file_declaration() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(subprogram_declaration())
Packit 1c1d7e
subprogram_declaration() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
 s=object_class() s1=identifier()
Packit 1c1d7e
 {
Packit 1c1d7e
 if (parse_sec==GEN_SEC)
Packit 1c1d7e
    
Packit 1c1d7e
    addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public);
Packit 1c1d7e
    return s;
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString interface_element() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
s=interface_declaration(){ return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString interface_file_declaration() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
<FILE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
Packit 1c1d7e
{
Packit 1c1d7e
   addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
Packit 1c1d7e
   return " file "+s+":"+s1;
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString interface_list() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
s=interface_element() (LOOKAHEAD(1) <SEMI_T> s1=interface_element(){s2+=";";s2+=s1;})* { return s+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString interface_variable_declaration() :  {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;}
Packit 1c1d7e
{
Packit 1c1d7e
[( tok=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ]
Packit 1c1d7e
  s=identifier_list() <COLON_T> [ s1=mode() ]
Packit 1c1d7e
  s2=subtype_indication()  [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> s4=expression() ]
Packit 1c1d7e
{
Packit 1c1d7e
                    if(tok)
Packit 1c1d7e
                    s5=tok->image.c_str();
Packit 1c1d7e
Packit 1c1d7e
                    if(tok1)
Packit 1c1d7e
                     s3=tok1->image.data();
Packit 1c1d7e
Packit 1c1d7e
                    if(tok2)
Packit 1c1d7e
                     s3+=":=";
Packit 1c1d7e
Packit 1c1d7e
                    QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
Packit 1c1d7e
                    if (currP!=VhdlDocGen::COMPONENT)
Packit 1c1d7e
                    {
Packit 1c1d7e
                      if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
Packit 1c1d7e
                      {
Packit 1c1d7e
                        addProto(s5.data(),s.data(),s1.data(),s2.data(),s3.data(),s4.data());
Packit 1c1d7e
                      }
Packit 1c1d7e
                      else
Packit 1c1d7e
                      {
Packit 1c1d7e
                        QCString i=s2+s3+s4;
Packit 1c1d7e
                        if (currP==VhdlDocGen::GENERIC && param_sec==0)
Packit 1c1d7e
                          addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public);
Packit 1c1d7e
                        else if(parse_sec != GEN_SEC)
Packit 1c1d7e
                          addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public);
Packit 1c1d7e
                      }
Packit 1c1d7e
                      //   fprintf(stderr,"\n\n <<port  %s  >>\n",$$.data());
Packit 1c1d7e
                    } // if component
Packit 1c1d7e
              return it;
Packit 1c1d7e
            }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString iteration_scheme() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
<WHILE_T> s=condition()
Packit 1c1d7e
{
Packit 1c1d7e
   s.prepend("while ");
Packit 1c1d7e
   FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),lab.data());
Packit 1c1d7e
   lab="";
Packit 1c1d7e
  return s;
Packit 1c1d7e
}
Packit 1c1d7e
| <FOR_T> s=parameter_specification()
Packit 1c1d7e
{
Packit 1c1d7e
    QCString q=lab+" for "+s;
Packit 1c1d7e
    FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
Packit 1c1d7e
    lab="";
Packit 1c1d7e
    return q;
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString label() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=identifier() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString library_clause() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 (<LIBRARY_T> s=identifier_list() <SEMI_T>
Packit 1c1d7e
 )
Packit 1c1d7e
 {
Packit 1c1d7e
               if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
Packit 1c1d7e
                   {
Packit 1c1d7e
                           addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
Packit 1c1d7e
                   }
Packit 1c1d7e
                   QCString s1="library "+s;
Packit 1c1d7e
                   return s1;
Packit 1c1d7e
 }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString library_unit() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
LOOKAHEAD(2)
Packit 1c1d7e
primary_unit() {  return s; }
Packit 1c1d7e
|  secondary_unit() {  return s; }
Packit 1c1d7e
|  context_declaration()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString literal() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
 LOOKAHEAD(bit_string_literal())
Packit 1c1d7e
s=bit_string_literal() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
 LOOKAHEAD(numeric_literal())
Packit 1c1d7e
 s=numeric_literal() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
Packit 1c1d7e
LOOKAHEAD(enumeration_literal())
Packit 1c1d7e
s=enumeration_literal() { return s;}
Packit 1c1d7e
| s=string_literal() { return s;}
Packit 1c1d7e
| <NULL_T> {return "null";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString logical_operator() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=logop() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString loop_statement() :  {QCString s,s1,s2,s3;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=identifier() <COLON_T> {s+=":";} ]
Packit 1c1d7e
    [ s1=iteration_scheme()  ]
Packit 1c1d7e
      {
Packit 1c1d7e
       if(s1.isEmpty())
Packit 1c1d7e
        FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
Packit 1c1d7e
       }
Packit 1c1d7e
      <LOOP_T>
Packit 1c1d7e
        s2=sequence_of_statement()
Packit 1c1d7e
        <END_T> <LOOP_T> [ s3=identifier() ] <SEMI_T>
Packit 1c1d7e
        {
Packit 1c1d7e
         QCString q = s+" loop "+s2+" end loop" +s3;
Packit 1c1d7e
         QCString endLoop="end loop" + s3;
Packit 1c1d7e
         FlowChart::moveToPrevLevel();
Packit 1c1d7e
         FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
Packit 1c1d7e
        return q;
Packit 1c1d7e
        }
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString miscellaneous_operator():{Token *t=0;}
Packit 1c1d7e
{
Packit 1c1d7e
  <DOUBLEMULT_T> {return "**";}
Packit 1c1d7e
  | <ABS_T>  {return "abs";}
Packit 1c1d7e
  | <NOT_T> {return "not";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString mode() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
tok=<IN_T> { return "in"; }
Packit 1c1d7e
| tok=<OUT_T> { return "out"; }
Packit 1c1d7e
| tok=<INOUT_T> { return "inout"; }
Packit 1c1d7e
| tok=<BUFFER_T> { return "buffer"; }
Packit 1c1d7e
| tok=<LINKAGE_T> { return "linkage"; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString multiplying_operation() : {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
tok=<MULT_T>      { return tok->image.c_str(); }
Packit 1c1d7e
| tok=<SLASH_T>  { return tok->image.c_str(); }
Packit 1c1d7e
| tok=<MOD_T>     { return tok->image.c_str(); }
Packit 1c1d7e
| tok=<REM_T>     { return tok->image.c_str(); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
 QCString name() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 (
Packit 1c1d7e
   s=operator_symbol()
Packit 1c1d7e
   | s=identifier()| s=external_name()
Packit 1c1d7e
  )
Packit 1c1d7e
 [LOOKAHEAD(name_ext1()) s1=name_ext1(){ s+=s1;}] {  return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString name_ext1() : {QCString s,s1,s2;}
Packit 1c1d7e
 {
Packit 1c1d7e
   s=name_ext() (LOOKAHEAD(name_ext()) s1=name_ext(){s+=s1;})* { return s;}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
 QCString name_ext() : {QCString s,s1,s2;}
Packit 1c1d7e
 {
Packit 1c1d7e
Packit 1c1d7e
  (
Packit 1c1d7e
 LOOKAHEAD(<DOT_T> suffix())
Packit 1c1d7e
 <DOT_T> s1=suffix(){s+=".";s+=s1;}
Packit 1c1d7e
|
Packit 1c1d7e
  LOOKAHEAD(test_att_name())
Packit 1c1d7e
   s1=test_att_name() { s+=s1;}
Packit 1c1d7e
 |
Packit 1c1d7e
 LOOKAHEAD( <LPAREN_T> discrete_range() <RPAREN_T>)
Packit 1c1d7e
  <LPAREN_T> s1=discrete_range() <RPAREN_T> {s+="(";s+=s1;s+=")";}
Packit 1c1d7e
   |
Packit 1c1d7e
  LOOKAHEAD( "(" expression() ("," expression() )* ")" )
Packit 1c1d7e
  <LPAREN_T> s1=expression() {s+="(";s+=s1;} (LOOKAHEAD(1) <COMMA_T>  s1=expression(){s+=",";s+=s1;})*  <RPAREN_T> { s+=")";}
Packit 1c1d7e
Packit 1c1d7e
 )
Packit 1c1d7e
 {return s;}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
 QCString test_att_name() : {QCString s,s1;}
Packit 1c1d7e
 {
Packit 1c1d7e
  [ LOOKAHEAD(<LBRACKET_T>) s1=signature() {s=s1;}]
Packit 1c1d7e
  <APOSTROPHE_T> s1=attribute_designator() {s+="'";s+=s1;}
Packit 1c1d7e
  [LOOKAHEAD(1) <LPAREN_T> s1=expression() <RPAREN_T> {s+="(";s+=s1;s+=")";}]
Packit 1c1d7e
   { return s;}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
 QCString indexed_name() : {QCString s,s1,s2;}
Packit 1c1d7e
 {
Packit 1c1d7e
   s2=identifier() <LPAREN_T> s1=expression(){s=s2+"("+s1;} (<COMMA_T> s1=expression(){s+=",";s+=s1;})* <RPAREN_T> {return s+")";}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString next_statement() :  {QCString s,s1,s2;Token *t=0;Token *t1=0;}
Packit 1c1d7e
{
Packit 1c1d7e
[LOOKAHEAD(1) s=identifier() t=<COLON_T> ] <NEXT_T> [ s1=identifier() ]
Packit 1c1d7e
[LOOKAHEAD(1)  t1=<WHEN_T> s2=condition() ] <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
  if(t) s+=":";
Packit 1c1d7e
   FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
Packit 1c1d7e
    lab.resize(0);
Packit 1c1d7e
  if(t1) s2.prepend("when ");
Packit 1c1d7e
  return s+s1+s2+";";
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString null_statement() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=identifier() <COLON_T> {s+=":";}] <NULL_T> <SEMI_T>{return s+="null";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString numeric_literal() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
 LOOKAHEAD(physical_literal())
Packit 1c1d7e
  s=physical_literal(){ return s;}
Packit 1c1d7e
 | s=abstract_literal() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString object_class() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
<CONSTANT_T>          { return "constant"; }
Packit 1c1d7e
|<SIGNAL_T>            { return "signal"; }
Packit 1c1d7e
|<VARIABLE_T>          { return "variable"; }
Packit 1c1d7e
|<SHARED_T> <VARIABLE_T> { return "shared variable"; }
Packit 1c1d7e
|<FILE_T>              { return "file"; }
Packit 1c1d7e
|<TYPE_T>              { return "type"; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString operator_symbol() :  {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
tok=<STRINGLITERAL> {return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void options() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  [ <GUARDED_T> ] [ delay_mechanism() ]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void package_body() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
<PACKAGE_T> <BODY_T> s=name() <IS_T>
Packit 1c1d7e
 {
Packit 1c1d7e
                        lastCompound=current;
Packit 1c1d7e
                        s.prepend("_");
Packit 1c1d7e
                        addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
Packit 1c1d7e
                      }
Packit 1c1d7e
 package_body_declarative_part()
Packit 1c1d7e
Packit 1c1d7e
<END_T> [<PACKAGE_T> <BODY_T>  ] [ name() ] <SEMI_T> { lastCompound=0; genLabels.resize(0); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void package_body_declarative_item() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
subprogram_declaration()
Packit 1c1d7e
//| subprogram_body()
Packit 1c1d7e
| type_declaration()
Packit 1c1d7e
| subtype_declaration()
Packit 1c1d7e
| constant_declaration()
Packit 1c1d7e
| variable_declaration()
Packit 1c1d7e
| file_declaration()
Packit 1c1d7e
| alias_declaration()
Packit 1c1d7e
| use_clause()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
group_template_declaration()
Packit 1c1d7e
| group_declaration()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void package_body_declarative_part() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
(package_body_declarative_item() )*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void package_declaration():  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
 <PACKAGE_T> s=identifier() <IS_T>
Packit 1c1d7e
                          {
Packit 1c1d7e
                          lastCompound=current;
Packit 1c1d7e
                          Entry *clone=new Entry(*current);
Packit 1c1d7e
                          clone->section=Entry::NAMESPACE_SEC;
Packit 1c1d7e
                          clone->spec=VhdlDocGen::PACKAGE;
Packit 1c1d7e
                          clone->name=s;
Packit 1c1d7e
                          clone->startLine=getLine(PACKAGE_T);
Packit 1c1d7e
                          clone->bodyLine=getLine(PACKAGE_T);
Packit 1c1d7e
                          clone->protection=Package;
Packit 1c1d7e
                          current_root->addSubEntry(clone);
Packit 1c1d7e
                          addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
Packit 1c1d7e
                          }
Packit 1c1d7e
    package_declarative_part()
Packit 1c1d7e
<END_T> [ <PACKAGE_T>] [ name() ] <SEMI_T>
Packit 1c1d7e
{ lastEntity=0;lastCompound=0; genLabels.resize(0); }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void geninter():{}
Packit 1c1d7e
{
Packit 1c1d7e
    [gen_interface_list() <SEMI_T> [gen_assoc_list() <SEMI_T>]]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void package_declarative_item() : {}
Packit 1c1d7e
{
Packit 1c1d7e
//LOOKAHEAD(3)
Packit 1c1d7e
//interface_subprogram_declaration()
Packit 1c1d7e
subprogram_declaration()
Packit 1c1d7e
| type_declaration()
Packit 1c1d7e
| subtype_declaration()
Packit 1c1d7e
| constant_declaration()
Packit 1c1d7e
| signal_declaration()
Packit 1c1d7e
| variable_declaration()
Packit 1c1d7e
| file_declaration()
Packit 1c1d7e
| alias_declaration()
Packit 1c1d7e
| component_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(attribute_declaration())
Packit 1c1d7e
 attribute_declaration()
Packit 1c1d7e
| attribute_specification()
Packit 1c1d7e
| disconnection_specification()
Packit 1c1d7e
| use_clause()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
 group_template_declaration()
Packit 1c1d7e
| group_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
 LOOKAHEAD(5)
Packit 1c1d7e
 package_instantiation_declaration()
Packit 1c1d7e
|package_declaration()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void package_declarative_part() : {}
Packit 1c1d7e
{
Packit 1c1d7e
 (package_declarative_item())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString parameter_specification() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=identifier() <IN_T> s1=discrete_range(){ return s+" in "+s1;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString physical_literal() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 [LOOKAHEAD(abstract_literal()) s=abstract_literal()] s1=name(){s+=" ";s+=s1;s.prepend(" "); return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString physical_type_definition() : {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
        <UNITS_T>
Packit 1c1d7e
            s=identifier()<SEMI_T> { addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,0,Public);}
Packit 1c1d7e
            (
Packit 1c1d7e
             s1=secondary_unit_declaration()
Packit 1c1d7e
            )*
Packit 1c1d7e
            <END_T> <UNITS_T>  [name()]
Packit 1c1d7e
            { return s+"%";}
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void port_clause() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
   <PORT_T> <LPAREN_T>  port_list()<RPAREN_T>  <SEMI_T>{ currP=0; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString port_list() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=interface_list(){return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void port_map_aspect() : {}
Packit 1c1d7e
{
Packit 1c1d7e
 <PORT_T> <MAP_T> <LPAREN_T> association_list() <RPAREN_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString primary() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
LOOKAHEAD(function_call())
Packit 1c1d7e
s=function_call() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(<LPAREN_T> expression() <RPAREN_T>)
Packit 1c1d7e
 <LPAREN_T> s1=expression() <RPAREN_T>{ s="("+s1+")"; return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(qualified_expression())
Packit 1c1d7e
s=qualified_expression() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(type_conversion())
Packit 1c1d7e
s=type_conversion() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(literal())
Packit 1c1d7e
s=literal() { s.prepend(" ");return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(name())
Packit 1c1d7e
s=name() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
allocator() { return "";}
Packit 1c1d7e
|
Packit 1c1d7e
s=aggregate() { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void primary_unit() : {}
Packit 1c1d7e
{
Packit 1c1d7e
entity_declaration()
Packit 1c1d7e
| configuration_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(package_instantiation_declaration())
Packit 1c1d7e
package_instantiation_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(4)
Packit 1c1d7e
 interface_package_declaration()
Packit 1c1d7e
| package_declaration()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString procedure_call() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=name()  [ <LPAREN_T> s1=actual_parameter_part() <RPAREN_T>{ s1.prepend("("); s1.append(")");}]
Packit 1c1d7e
{ return s+s1;}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString procedure_call_statement() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
[LOOKAHEAD(2) s=identifier() <COLON_T> { s+=":"; }] s1=procedure_call() <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
  return s+s1+";";
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString process_declarative_item() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
subprogram_declaration() { return "";}
Packit 1c1d7e
//| subprogram_body()
Packit 1c1d7e
| s=type_declaration() { return s;}
Packit 1c1d7e
| s=subtype_declaration() { return s;}
Packit 1c1d7e
| s=constant_declaration() { return s;}
Packit 1c1d7e
| s=variable_declaration() { return s;}
Packit 1c1d7e
| s=file_declaration() { return s;}
Packit 1c1d7e
| s=alias_declaration() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
s=attribute_declaration() { return s;}
Packit 1c1d7e
| s=attribute_specification() { return s;}
Packit 1c1d7e
| s=use_clause() { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
s=group_template_declaration()  { return s;}
Packit 1c1d7e
| s=group_declaration() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString process_declarative_part() :{QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 ( s1=process_declarative_item(){s+=s1;} )* { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void process_statement() : {QCString s,s1,s2;Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=identifier() <COLON_T> ]
Packit 1c1d7e
[ <POSTPONED_T> ]
Packit 1c1d7e
 {
Packit 1c1d7e
               currP=VhdlDocGen::PROCESS;
Packit 1c1d7e
               current->startLine=getLine();
Packit 1c1d7e
               current->bodyLine=getLine();
Packit 1c1d7e
  }
Packit 1c1d7e
 <PROCESS_T>
Packit 1c1d7e
 //try{
Packit 1c1d7e
 [ <LPAREN_T> (tok=<ALL_T> | s1=sensitivity_list()) <RPAREN_T> ] [ <IS_T> ]
Packit 1c1d7e
        s2=process_declarative_part()
Packit 1c1d7e
             {
Packit 1c1d7e
              if (s2.data())
Packit 1c1d7e
                  FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s2.data(),0);
Packit 1c1d7e
                FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
Packit 1c1d7e
               }
Packit 1c1d7e
        <BEGIN_T>
Packit 1c1d7e
        process_statement_part()
Packit 1c1d7e
        <END_T> [ <POSTPONED_T> ]
Packit 1c1d7e
         // }catch(...){error_skipto(PROCESS_T);}
Packit 1c1d7e
        <PROCESS_T> [ identifier() ] <SEMI_T>
Packit 1c1d7e
 {
Packit 1c1d7e
  if(s.isEmpty())
Packit 1c1d7e
   currName=VhdlDocGen::getProcessNumber();
Packit 1c1d7e
   else
Packit 1c1d7e
   currName=s;
Packit 1c1d7e
Packit 1c1d7e
   current->name=currName;
Packit 1c1d7e
   tempEntry=current;
Packit 1c1d7e
   current->endBodyLine=getLine();
Packit 1c1d7e
   currP=0;
Packit 1c1d7e
 if(tok)
Packit 1c1d7e
   s1=tok->image.data();
Packit 1c1d7e
  createFunction(currName,VhdlDocGen::PROCESS,s1.data());
Packit 1c1d7e
  createFlow();
Packit 1c1d7e
   currName="";
Packit 1c1d7e
   newEntry();
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void process_statement_part() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  (sequential_statement())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString qualified_expression() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
  s1=identifier() <APOSTROPHE_T> {s=s1+"'";}
Packit 1c1d7e
  (
Packit 1c1d7e
    LOOKAHEAD(aggregate())
Packit 1c1d7e
    s1=aggregate(){s+=s1;}
Packit 1c1d7e
    | <LPAREN_T> s1=expression() <RPAREN_T>{s+="(";s+=s1;s+=")";}
Packit 1c1d7e
 )
Packit 1c1d7e
 {return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString range() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
   LOOKAHEAD( simple_expression() direction() simple_expression())
Packit 1c1d7e
   s=simple_expression() s1=direction() s2=simple_expression(){return s+" "+s1+" "+s2;}
Packit 1c1d7e
  |
Packit 1c1d7e
 LOOKAHEAD(attribute_name())
Packit 1c1d7e
  s=attribute_name(){ return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString range_constraint() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
<RANGE_T> s=range(){return " range "+s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void record_type_definition() : {}
Packit 1c1d7e
{
Packit 1c1d7e
    <RECORD_T>
Packit 1c1d7e
     //  try{
Packit 1c1d7e
       (element_declaration())+
Packit 1c1d7e
            //    }catch(...){error_skipto(END_T);}
Packit 1c1d7e
       <END_T>
Packit 1c1d7e
       <RECORD_T> [ name()]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString relation() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=shift_expression() [LOOKAHEAD(1) s1=relation_operator() s2=shift_expression() ] {return s+s1+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString relation_operator() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 <LT_T> {return "<";}
Packit 1c1d7e
 |<GT_T> {return ">";}
Packit 1c1d7e
 |<EQU_T> {return "=";}
Packit 1c1d7e
 |<GREATERTHAN_T> {return ">=";}
Packit 1c1d7e
 |<LESSTHAN_T> {return "<=";}
Packit 1c1d7e
 |<NOTEQU_T> {return "/=";}
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString report_statement() :  {Token *t=0;Token *t1=0;QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=identifier() t=<COLON_T> ]
Packit 1c1d7e
    <REPORT_T> s1=expression()
Packit 1c1d7e
        [ t1=<SEVERITY_T> s2=expression() ] <SEMI_T>
Packit 1c1d7e
        {
Packit 1c1d7e
        if(t) s.append(":");
Packit 1c1d7e
        s1.prepend(" report ");
Packit 1c1d7e
        if(t1) s2.prepend(" severity ");
Packit 1c1d7e
        return s+s1+s2+";";
Packit 1c1d7e
        }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString return_statement() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=identifier() <COLON_T> { s+=":";}] <RETURN_T> [ s1=expression() ] <SEMI_T>
Packit 1c1d7e
{ return s+" return "+s1+";";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString scalar_type_definition() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
s=enumeration_type_definition(){ return s;}
Packit 1c1d7e
| s=range_constraint() [LOOKAHEAD( physical_type_definition()) s1=physical_type_definition()] { return s+" "+s1+"%";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void secondary_unit() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
architecture_body()
Packit 1c1d7e
| package_body()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString secondary_unit_declaration() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=identifier() <EQU_T> s1=physical_literal() <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
  //printf("\n %s %s [%d]",s.data(),s1.data(),getLine());
Packit 1c1d7e
  addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,s1.data(),Public);
Packit 1c1d7e
Packit 1c1d7e
  return s+"="+s1; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString selected_name() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=identifier() <DOT_T> s1=suffix(){ return s+"."+s1;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void selected_signal_assignment() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  <WITH_T> expression() <SELECT_T>
Packit 1c1d7e
Packit 1c1d7e
    target() < LESSTHAN_T> options() selected_waveforms() <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void selected_waveforms() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 waveform() <WHEN_T> choices()(<COMMA_T> waveform() <WHEN_T> choices())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString sensitivity_clause() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 <ON_T> s=sensitivity_list()
Packit 1c1d7e
 {
Packit 1c1d7e
  s.prepend(" on ");
Packit 1c1d7e
  return s;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString sensitivity_list() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=name() (<COMMA_T> s1=name(){s+=",";s+=s1;} )* { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString sequence_of_statement() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 ( LOOKAHEAD(3) s1=sequential_statement() {s+=s1;} )* { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString sequential_statement() :{QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
    LOOKAHEAD( [ identifier() ":" ] target() "<=")
Packit 1c1d7e
    s=signal_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(3)
Packit 1c1d7e
    s=assertion_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
     LOOKAHEAD(3)
Packit 1c1d7e
    s=report_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(3)
Packit 1c1d7e
    s=wait_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(  [ identifier() ":" ] target() ":=" )
Packit 1c1d7e
    s=variable_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(3)
Packit 1c1d7e
    s=procedure_call_statement(){ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; }
Packit 1c1d7e
    |
Packit 1c1d7e
     LOOKAHEAD(3)
Packit 1c1d7e
    if_statement(){return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
     LOOKAHEAD(3)
Packit 1c1d7e
    case_statement(){return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(3)
Packit 1c1d7e
    loop_statement(){return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(3)
Packit 1c1d7e
    s=next_statement() {return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(3)
Packit 1c1d7e
    s=exit_statement(){return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    LOOKAHEAD(3)
Packit 1c1d7e
    s=return_statement(){FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;}
Packit 1c1d7e
    |
Packit 1c1d7e
    s=null_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString shift_expression() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=simple_expression() [ s1=shift_operator() s2=simple_expression() ] { return s+s1+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
QCString shift_operator() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  <SLL_T> { return "sll";}
Packit 1c1d7e
  | <SRL_T> { return "srl";}
Packit 1c1d7e
  | <SLA_T> { return "sla";}
Packit 1c1d7e
  | <SRA_T> { return "sra";}
Packit 1c1d7e
  | <ROL_T> { return "rol";}
Packit 1c1d7e
  | <ROR_T> { return "ror";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString sign() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 <PLUS_T> { return "+";}
Packit 1c1d7e
 | <MINUS_T> { return "-";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString signal_assignment_statement() : {QCString s,s1,s2,s3;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
  LOOKAHEAD(conditional_signal_assignment_wave())
Packit 1c1d7e
  conditional_signal_assignment_wave(){ return ""; }
Packit 1c1d7e
|
Packit 1c1d7e
  LOOKAHEAD(selected_signal_assignment_wave())
Packit 1c1d7e
  selected_signal_assignment_wave() { return ""; }
Packit 1c1d7e
  |
Packit 1c1d7e
  [LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";} ]
Packit 1c1d7e
s1=target() <LESSTHAN_T>
Packit 1c1d7e
[ s2=delay_mechanism() ]
Packit 1c1d7e
s3=waveform() <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
  return s+s1+"<="+s2+s3+";";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void semi() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
<SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void signal_declaration() :  { Token* tok=0;QCString s,s1,s2,s3,s4;}
Packit 1c1d7e
{
Packit 1c1d7e
<SIGNAL_T> s=identifier_list() <COLON_T> s1=subtype_indication() [ s2=signal_kind() ] [ tok=<VARASSIGN_T> s3=expression() ] <SEMI_T>
Packit 1c1d7e
     {
Packit 1c1d7e
     if(tok)
Packit 1c1d7e
      s3.prepend(":=");
Packit 1c1d7e
     s4=s1+s2+s3;
Packit 1c1d7e
     addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
Packit 1c1d7e
     }
Packit 1c1d7e
}
Packit 1c1d7e
QCString signal_kind() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
  <REGISTER_T> { return "register";}
Packit 1c1d7e
  | <BUS_T>  { return "bus";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString signal_list() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=name() (<COMMA_T>  s1=name() { s+=",";s+=s1;})*
Packit 1c1d7e
| <OTHER_T> { return "other";}
Packit 1c1d7e
| <ALL_T> { return "all";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString signature() : {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
<LBRACKET_T>
Packit 1c1d7e
 [ s=name()  (<COMMA_T> s1=name() {s+=",";s+=s1; })* ]
Packit 1c1d7e
 [ <RETURN_T> s1=name() {s+="return ";s+=s1;}]
Packit 1c1d7e
  <RBRACKET_T>
Packit 1c1d7e
  { s1="["+s+"]";return s1;}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString simple_expression():  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=sign() ] s1=term() {s+=s1;} ( LOOKAHEAD(adding_operator() term()) s1=adding_operator() s2=term() {s+=s1;s+=s2;})* { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void simple_name() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
name()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString slice_name() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=identifier() <LPAREN_T> s1=discrete_range() <RPAREN_T> {return s+"("+s1+")";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString string_literal() : {Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
tok=<STRINGLITERAL> {return tok->image.c_str();}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
 void subprogram_body() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
//subprogram_specification()
Packit 1c1d7e
<IS_T>
Packit 1c1d7e
 //try{
Packit 1c1d7e
 s=subprogram_declarative_part()
Packit 1c1d7e
   {
Packit 1c1d7e
      if (s.data())
Packit 1c1d7e
      {
Packit 1c1d7e
        FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s,0);
Packit 1c1d7e
      }
Packit 1c1d7e
      FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
Packit 1c1d7e
    }
Packit 1c1d7e
 // }catch(...){error_skipto(BEGIN_T);}
Packit 1c1d7e
<BEGIN_T>
Packit 1c1d7e
subprogram_statement_part()
Packit 1c1d7e
<END_T> [ subprogram_kind() ] [ designator() ] <SEMI_T>
Packit 1c1d7e
 {
Packit 1c1d7e
      tempEntry->endBodyLine=getLine(END_T);
Packit 1c1d7e
      createFlow();
Packit 1c1d7e
      currP=0;
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void subprogram_declaration() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
LOOKAHEAD(subprogram_instantiation_declaration())
Packit 1c1d7e
subprogram_instantiation_declaration()
Packit 1c1d7e
|
Packit 1c1d7e
subprogram_specification()subprogram_1(){currP=0;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void subprogram_1() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
 subprogram_body()
Packit 1c1d7e
 | <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString subprogram_declarative_item() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
subprogram_declaration(){ return "";}
Packit 1c1d7e
|s=type_declaration(){ return s;}
Packit 1c1d7e
 | subprogram_body(){ return "";}
Packit 1c1d7e
| s=subtype_declaration(){ return s;}
Packit 1c1d7e
| s=constant_declaration(){ return s;}
Packit 1c1d7e
| s=variable_declaration(){ return s;}
Packit 1c1d7e
| s=file_declaration(){ return s;}
Packit 1c1d7e
| s=alias_declaration(){ return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(attribute_declaration())
Packit 1c1d7e
s=attribute_declaration(){ return s;}
Packit 1c1d7e
| s=attribute_specification(){ return s;}
Packit 1c1d7e
| s=use_clause(){ return s;}
Packit 1c1d7e
|
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
s=group_template_declaration(){ return s;}
Packit 1c1d7e
| s=group_declaration() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString subprogram_declarative_part() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
  (s1=subprogram_declarative_item(){s+=s1;})* { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void subprogram_kind() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 <FUNCTION_T>
Packit 1c1d7e
 |<PROCEDURE_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void subprogram_specification() : {QCString s;Token *tok=0;Token *t;}
Packit 1c1d7e
{
Packit 1c1d7e
 <PROCEDURE_T> s=designator()
Packit 1c1d7e
 {
Packit 1c1d7e
              currP=VhdlDocGen::PROCEDURE;
Packit 1c1d7e
              createFunction(s.data(),currP,0);
Packit 1c1d7e
              tempEntry=current;
Packit 1c1d7e
               current->startLine=getLine(PROCEDURE_T);
Packit 1c1d7e
               current->bodyLine=getLine(PROCEDURE_T);
Packit 1c1d7e
Packit 1c1d7e
              } [LOOKAHEAD(1) <LPAREN_T> { param_sec=PARAM_SEC; } interface_list() { param_sec=0; }<RPAREN_T> ]
Packit 1c1d7e
             [LOOKAHEAD(2) gen_interface_list()]
Packit 1c1d7e
             [ LOOKAHEAD(2) gen_assoc_list()]
Packit 1c1d7e
             param()
Packit 1c1d7e
              {  newEntry(); }
Packit 1c1d7e
|
Packit 1c1d7e
 [ (tok=<PURE_T> | tok=<IMPURE_T>) ] t=<FUNCTION_T> s=designator()
Packit 1c1d7e
  {
Packit 1c1d7e
     currP=VhdlDocGen::FUNCTION;
Packit 1c1d7e
     if(tok)
Packit 1c1d7e
     createFunction(tok->image.c_str(),currP,s.data());
Packit 1c1d7e
     else
Packit 1c1d7e
     createFunction(0,currP,s.data());
Packit 1c1d7e
      tempEntry=current;
Packit 1c1d7e
      current->startLine=getLine(FUNCTION_T);
Packit 1c1d7e
      current->bodyLine=getLine(FUNCTION_T);
Packit 1c1d7e
  }
Packit 1c1d7e
 [{ param_sec=PARAM_SEC; } <LPAREN_T> formal_parameter_list() <RPAREN_T> { param_sec=0; }]
Packit 1c1d7e
    <RETURN_T> s=type_mark()
Packit 1c1d7e
             {
Packit 1c1d7e
                tempEntry=current;
Packit 1c1d7e
                current->type=s;
Packit 1c1d7e
                newEntry();
Packit 1c1d7e
              }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void subprogram_statement_part() : {}
Packit 1c1d7e
{
Packit 1c1d7e
  (sequential_statement())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString subtype_declaration() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
<SUBTYPE_T> s=identifier() <IS_T> s1=subtype_indication() <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
  addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,s1.data(),Public);
Packit 1c1d7e
  return " subtype "+s+" is "+s1+";";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString subtype_indication() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=name()
Packit 1c1d7e
 [LOOKAHEAD (name()) s1=name()] [LOOKAHEAD(constraint() ) s2=constraint()]
Packit 1c1d7e
 {return s+" "+s1+" "+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString suffix() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
LOOKAHEAD(name())
Packit 1c1d7e
s=name() { return s;}
Packit 1c1d7e
| s=character_literal() { return s;}
Packit 1c1d7e
| s=operator_symbol(){ return s;}
Packit 1c1d7e
| <ALL_T> {return " all ";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString target() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=name(){ return s;}
Packit 1c1d7e
| s=aggregate() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString term() : {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=factor() ( LOOKAHEAD(2) s1=multiplying_operation() s2=factor(){s+=s1;s+=s2;} )* { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString timeout_clause() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
<FOR_T>  s=expression()
Packit 1c1d7e
{
Packit 1c1d7e
  return " for "+s;
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString type_conversion() : {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=name() <LPAREN_T> s1=expression() <RPAREN_T> { return s+"("+s1+")";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString type_declaration() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
LOOKAHEAD(3)
Packit 1c1d7e
s=full_type_declaration(){ return s;}
Packit 1c1d7e
| s=incomplete_type_declaration(){ return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString type_definition() :  {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
//try{
Packit 1c1d7e
s=scalar_type_definition(){ return s;}
Packit 1c1d7e
| s=composite_type_definition(){ return s;}
Packit 1c1d7e
| s=access_type_definition(){ return s;}
Packit 1c1d7e
| s=file_type_definition(){ return s;}
Packit 1c1d7e
|
Packit 1c1d7e
 LOOKAHEAD(2)
Packit 1c1d7e
 protected_type_body()            { return ""; }
Packit 1c1d7e
| protected_type_declaration()     { return ""; }
Packit 1c1d7e
//}catch(...){error_skipto(SEMI_T); return "";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString type_mark() : {QCString s; }
Packit 1c1d7e
{
Packit 1c1d7e
  s=name() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString unconstraint_array_definition() :  {QCString s,s1,s2,s3;}
Packit 1c1d7e
{
Packit 1c1d7e
<ARRAY_T> <LPAREN_T> s=index_subtype_definition() ( <COMMA_T> s1=index_subtype_definition(){s3+=",";s3+=s1;})* <RPAREN_T>
Packit 1c1d7e
 <OF_T> s2=subtype_indication() {return "array("+s+s3+") of "+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
 QCString use_clause() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 <USE_T> s=selected_name()(<COMMA_T> s1=selected_name(){s+=",";s+=s1;})*   <SEMI_T>
Packit 1c1d7e
  {
Packit 1c1d7e
                   QStringList ql1=QStringList::split(",",s,FALSE);
Packit 1c1d7e
                   for (uint j=0;j
Packit 1c1d7e
                   {
Packit 1c1d7e
                    QStringList ql=QStringList::split(".",ql1[j],FALSE);
Packit 1c1d7e
                    QCString it=ql[1].utf8();
Packit 1c1d7e
                     if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
Packit 1c1d7e
                     {
Packit 1c1d7e
                       VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
Packit 1c1d7e
                     }
Packit 1c1d7e
                   }
Packit 1c1d7e
                   s1="use "+s;
Packit 1c1d7e
                   return s1;
Packit 1c1d7e
   }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString variable_assignment_statement() :  {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
[LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";}]
Packit 1c1d7e
 s1=target() <VARASSIGN_T> s2=expression() <SEMI_T>
Packit 1c1d7e
 {return s+s1+":="+s2+";";}
Packit 1c1d7e
 |
Packit 1c1d7e
 selected_variable_assignment() { return "";  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString variable_declaration() :  {Token *tok=0;Token *t1=0;QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
[ tok=<SHARED_T> ] <VARIABLE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
Packit 1c1d7e
[ t1=<VARASSIGN_T> s2=expression() ] <SEMI_T>
Packit 1c1d7e
Packit 1c1d7e
{
Packit 1c1d7e
    int spec;
Packit 1c1d7e
    if(t1)
Packit 1c1d7e
     s2.prepend(":=");
Packit 1c1d7e
    QCString val=" variable "+s+":"+s1+s2+";";
Packit 1c1d7e
    QCString it=s1;
Packit 1c1d7e
    if(tok != 0)
Packit 1c1d7e
    {
Packit 1c1d7e
     it.prepend(" shared ");
Packit 1c1d7e
     val.prepend(" shared");
Packit 1c1d7e
     spec=VhdlDocGen::SHAREDVARIABLE;
Packit 1c1d7e
     }
Packit 1c1d7e
     else
Packit 1c1d7e
     spec=VhdlDocGen::SHAREDVARIABLE;
Packit 1c1d7e
Packit 1c1d7e
    if(t1){
Packit 1c1d7e
     it+=":=";
Packit 1c1d7e
     it+=s2;
Packit 1c1d7e
     }
Packit 1c1d7e
    addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
Packit 1c1d7e
    return val;
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString wait_statement() :  {QCString s,s1,s2,s3;Token *t=0;}
Packit 1c1d7e
{
Packit 1c1d7e
[ s=identifier() t=<COLON_T> ] <WAIT_T> [ s1=sensitivity_clause() ] [ s2=condition_clause() ] [ s3=timeout_clause() ] <SEMI_T>
Packit 1c1d7e
{
Packit 1c1d7e
  if(t) s.append(":");
Packit 1c1d7e
  return s+" wait "+s1+s2+s3+";";
Packit 1c1d7e
}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString waveform() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
s=waveform_element() (LOOKAHEAD(1) <COMMA_T> s1=waveform_element(){s+=","; s+=s1;})* { return s;}
Packit 1c1d7e
|
Packit 1c1d7e
<UNAFFECTED_T> { return " unaffected ";}
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString waveform_element() :  {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 s=expression() [ <AFTER_T> s1=expression(){ s1.prepend(" after ");} ]
Packit 1c1d7e
 { return s+s1;}
Packit 1c1d7e
//<NULL_T> [ <AFTER_T> expression() ]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// -----------------------------------------------------------------
Packit 1c1d7e
// VHDL 2002
Packit 1c1d7e
// -----------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
QCString protected_type_body() :{ }
Packit 1c1d7e
{
Packit 1c1d7e
  // try{
Packit 1c1d7e
   <PROTECTED_T> <BODY_T>
Packit 1c1d7e
          protected_type_body_declarative_part()
Packit 1c1d7e
Packit 1c1d7e
    //}catch(...){error_skipto(END_T);}
Packit 1c1d7e
    <END_T><PROTECTED_T> <BODY_T>   [identifier()]  {return "";}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void protected_type_body_declarative_item() :    { }
Packit 1c1d7e
 {
Packit 1c1d7e
    subprogram_declaration()
Packit 1c1d7e
    | subprogram_body()
Packit 1c1d7e
    | type_declaration()
Packit 1c1d7e
    | subtype_declaration()
Packit 1c1d7e
    | constant_declaration()
Packit 1c1d7e
    | variable_declaration()
Packit 1c1d7e
    | file_declaration()
Packit 1c1d7e
    | alias_declaration()
Packit 1c1d7e
    |
Packit 1c1d7e
      LOOKAHEAD( attribute_declaration())
Packit 1c1d7e
      attribute_declaration()
Packit 1c1d7e
    | attribute_specification()
Packit 1c1d7e
    | use_clause()
Packit 1c1d7e
    | LOOKAHEAD(3)
Packit 1c1d7e
      group_template_declaration()
Packit 1c1d7e
    | group_declaration()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void protected_type_body_declarative_part() :{  }
Packit 1c1d7e
{
Packit 1c1d7e
    ( protected_type_body_declarative_item ())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString protected_type_declaration() : {  }
Packit 1c1d7e
 {
Packit 1c1d7e
   <PROTECTED_T>
Packit 1c1d7e
        try{
Packit 1c1d7e
          protected_type_declarative_part()
Packit 1c1d7e
        }catch(...){error_skipto(END_T);}
Packit 1c1d7e
       <END_T><PROTECTED_T> [ identifier() ] { return "";}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void protected_type_declarative_item():    { }
Packit 1c1d7e
{
Packit 1c1d7e
    subprogram_specification()
Packit 1c1d7e
    | attribute_specification()
Packit 1c1d7e
    | use_clause()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void protected_type_declarative_part() :    {}
Packit 1c1d7e
{
Packit 1c1d7e
    (protected_type_declarative_item ()<SEMI_T>)*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// -----------------------------------------------------------------
Packit 1c1d7e
// VHDL 2008
Packit 1c1d7e
// -----------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
QCString context_ref() : {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 <CONTEXT_T>  s=identifier_list() <SEMI_T>
Packit 1c1d7e
 {
Packit 1c1d7e
  return "context "+s ;
Packit 1c1d7e
 }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void context_declaration(): {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 <CONTEXT_T> s=identifier() <IS_T> { parse_sec=CONTEXT_SEC; }  (s1=libustcont_stats())* <END_T> [ <CONTEXT_T> ][identifier()] <SEMI_T>
Packit 1c1d7e
                        {
Packit 1c1d7e
                          parse_sec=0;
Packit 1c1d7e
                          addVhdlType(s.data(),getLine(LIBRARY_T),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",s1.data(),Public);
Packit 1c1d7e
                        }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString libustcont_stats(): {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
   s=use_clause()  { return s;}
Packit 1c1d7e
   | s=library_clause() { return s;}
Packit 1c1d7e
   | s=context_ref() { return s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
 void package_instantiation_declaration() : {QCString s,s1,s2;}
Packit 1c1d7e
 {
Packit 1c1d7e
 <PACKAGE_T> s=identifier() <IS_T>  <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <SEMI_T>
Packit 1c1d7e
    {
Packit 1c1d7e
      QCString q=" is new "+s1+s2;
Packit 1c1d7e
      addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public);
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString interface_package_declaration(): {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 <PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() [gen_assoc_list()]
Packit 1c1d7e
                        {
Packit 1c1d7e
                          current->name=s;
Packit 1c1d7e
                            return "package "+s+" is new "+s1;
Packit 1c1d7e
                         }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString subprogram_instantiation_declaration():{QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 <FUNCTION_T>  s=identifier() <IS_T> <NEW_T> s1=name()  s2=signature() [gen_assoc_list()] <SEMI_T>
Packit 1c1d7e
    {
Packit 1c1d7e
     QCString q= " is new "+s1+s2;
Packit 1c1d7e
      addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public);
Packit 1c1d7e
    return q;
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void gen_assoc_list():{}
Packit 1c1d7e
{
Packit 1c1d7e
   <GENERIC_T> <MAP_T> <LPAREN_T>  association_list()<RPAREN_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void gen_interface_list() : {}
Packit 1c1d7e
{
Packit 1c1d7e
   <GENERIC_T><LPAREN_T>
Packit 1c1d7e
                        {
Packit 1c1d7e
                          //int u=s_str.iLine;
Packit 1c1d7e
                          parse_sec=GEN_SEC;
Packit 1c1d7e
                        }
Packit 1c1d7e
                        interface_list()
Packit 1c1d7e
                        {
Packit 1c1d7e
                        //  QCString vo=$3;
Packit 1c1d7e
                          parse_sec=0;
Packit 1c1d7e
                        }
Packit 1c1d7e
                        <RPAREN_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void case_scheme (): {}
Packit 1c1d7e
{
Packit 1c1d7e
 <CASE_T> expression() <GENERATE_T> when_stats() [LOOKAHEAD(3) ttend()]  <END_T>
Packit 1c1d7e
 <GENERATE_T> generate_statement_body() <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void when_stats() : {}
Packit 1c1d7e
{
Packit 1c1d7e
  (
Packit 1c1d7e
   <WHEN_T> [LOOKAHEAD(2) label() <COLON_T>] choices() <ARROW_T> generate_statement_body()
Packit 1c1d7e
   )+
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ttend(): {}
Packit 1c1d7e
{
Packit 1c1d7e
  <END_T> [identifier()] <SEMI_T>
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void generate_statement_body() : {}
Packit 1c1d7e
{
Packit 1c1d7e
   <BEGIN_T> generate_statement_body()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void generate_statement_body1() : {}
Packit 1c1d7e
{
Packit 1c1d7e
  //   [LOOKAHEAD(block_declarative_item()<BEGIN_T> )(block_declarative_item() )*  <BEGIN_T>] (concurrent_statement())*
Packit 1c1d7e
Packit 1c1d7e
   [(LOOKAHEAD(block_declarative_item())block_declarative_item() )*  <BEGIN_T>] (concurrent_statement())*
Packit 1c1d7e
  // | (concurrent_statement())*
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString external_name(): {QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
 <SLSL_T> s=sig_stat() s1=external_pathname() <COLON_T>  s2=subtype_indication()  <RSRS_T>
Packit 1c1d7e
                        {
Packit 1c1d7e
                         QCString t="<<"+s;
Packit 1c1d7e
                         QCString t1=s1+":"+s2+">>";
Packit 1c1d7e
                         return   s+s1;
Packit 1c1d7e
                        }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString sig_stat(): {Token *t;}
Packit 1c1d7e
{
Packit 1c1d7e
  t=<CONSTANT_T>      { return t->image.data(); }
Packit 1c1d7e
  | t=<SIGNAL_T>      { return t->image.data(); }
Packit 1c1d7e
  | t=<VARIABLE_T>   { return t->image.data(); }
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString external_pathname(): {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
   s=absolute_pathname()  { return s;}
Packit 1c1d7e
 | s=relative_pathname()   { return s;}
Packit 1c1d7e
 | s=package_path_name()   { return s;}
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString absolute_pathname(): {QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
 LOOKAHEAD(<DOT_T>  pathname_element_list())
Packit 1c1d7e
 <DOT_T>  s=pathname_element_list() s1=identifier() { return "."+s+s1;}
Packit 1c1d7e
| <DOT_T>  s=identifier (){ return "."+s;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString relative_pathname():{QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=neg_list() [LOOKAHEAD( pathname_element_list()) s1=pathname_element_list() ] s2=identifier() { return s+s1+s2;}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString neg_list(): {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 (<NEG_T> <DOT_T>{s+="^.";})+     {return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString pathname_element ():{QCString s,s1;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=identifier() [<LPAREN_T> s1=expression()  <RPAREN_T>]
Packit 1c1d7e
  {
Packit 1c1d7e
    if(!s1.isEmpty())
Packit 1c1d7e
     return s+"("+s1+")";
Packit 1c1d7e
Packit 1c1d7e
    return s;
Packit 1c1d7e
  }
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString pathname_element_list():{QCString s,s1,s2;}
Packit 1c1d7e
{
Packit 1c1d7e
        ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })*
Packit 1c1d7e
        { return s+s2; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString package_path_name():{QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
 <AT_T> s=name() { return "@"+s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void conditional_signal_assignment_wave(): {}
Packit 1c1d7e
{
Packit 1c1d7e
  LOOKAHEAD(conditional_force_assignment())
Packit 1c1d7e
  conditional_force_assignment()
Packit 1c1d7e
  |conditional_waveform_assignment()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void conditional_waveform_assignment():{}
Packit 1c1d7e
{
Packit 1c1d7e
 target() <LESSTHAN_T> [LOOKAHEAD(1) delay_mechanism() ] waveform_element() <WHEN_T> expression() [else_wave_list()] <SEMI_T>
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
void  else_wave_list(): {}
Packit 1c1d7e
{
Packit 1c1d7e
<ELSE_T> expression() [ <WHEN_T> expression()]
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void conditional_force_assignment(): {}
Packit 1c1d7e
{
Packit 1c1d7e
 target()  <LESSTHAN_T> <FORCE_T>  [inout_stat()] expression() <WHEN_T> [expression() else_stat()] <SEMI_T>
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void selected_signal_assignment_wave() : {}
Packit 1c1d7e
{
Packit 1c1d7e
 LOOKAHEAD(selected_force_assignment() )
Packit 1c1d7e
 selected_force_assignment()
Packit 1c1d7e
| selected_waveform_assignment()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void selected_variable_assignment():{}
Packit 1c1d7e
{
Packit 1c1d7e
  <WITH_T> expression() <SELECT_T> [<Q_T>] select_name() <VARASSIGN_T> sel_var_list() // { $$=""; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void select_name(): {}
Packit 1c1d7e
{
Packit 1c1d7e
 LOOKAHEAD(aggregate())
Packit 1c1d7e
 aggregate()
Packit 1c1d7e
  | name()
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void selected_waveform_assignment():{}
Packit 1c1d7e
{
Packit 1c1d7e
 <WITH_T> expression() <SELECT_T>  [<Q_T>]
Packit 1c1d7e
   target() <LESSTHAN_T> [delay_mechanism()] sel_wave_list()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void selected_force_assignment():{}
Packit 1c1d7e
{
Packit 1c1d7e
<WITH_T> expression() <SELECT_T> [<Q_T>] target() <LESSTHAN_T> <FORCE_T>
Packit 1c1d7e
                                                  [inout_stat()] sel_var_list()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void sel_var_list(): {}
Packit 1c1d7e
{
Packit 1c1d7e
  (expression() <WHEN_T> choices() (<COMMA_T>|<SEMI_T>))(LOOKAHEAD(expression() <WHEN_T>) expression() <WHEN_T> choices() (<COMMA_T>|<SEMI_T>))*
Packit 1c1d7e
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void sel_wave_list() : {}
Packit 1c1d7e
{
Packit 1c1d7e
   waveform_element() <WHEN_T> choices() (LOOKAHEAD(1) <COMMA_T> sel_wave_list())* <SEMI_T>
Packit 1c1d7e
  // |  sel_wave_list_1()
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void inout_stat(): {}
Packit 1c1d7e
{
Packit 1c1d7e
  <IN_T>
Packit 1c1d7e
 | <OUT_T>
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
void else_stat(): {}
Packit 1c1d7e
{
Packit 1c1d7e
   (<ELSE_T> expression() [LOOKAHEAD(1) <WHEN_T> expression()])+
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString interface_subprogram_declaration(): {QCString s;}
Packit 1c1d7e
{
Packit 1c1d7e
  s=iproc()  { return s;}
Packit 1c1d7e
 | s=ifunc()  { return s; }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString iproc(): {QCString s,s1;}
Packit 1c1d7e
 {
Packit 1c1d7e
  <PROCEDURE_T> s=identifier()  s1=param()
Packit 1c1d7e
  {
Packit 1c1d7e
  current->name=s;
Packit 1c1d7e
  return "procedure "+s+s1;
Packit 1c1d7e
  }
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
QCString ifunc():{QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;}
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
 [t=<PURE_T> | t=<IMPURE_T> ] <FUNCTION_T>  s=name() s1=param() <RETURN_T> s2=name() [t1=<IS_T> (s3=identifier() | t2=<BOX_T>)]
Packit 1c1d7e
    {
Packit 1c1d7e
      QCString q;
Packit 1c1d7e
      if(t) q=t->image.data();
Packit 1c1d7e
      if(t2) s3="<>";
Packit 1c1d7e
      if (!s3.isEmpty())
Packit 1c1d7e
      {
Packit 1c1d7e
        s3.prepend(" is ");
Packit 1c1d7e
      }
Packit 1c1d7e
     current->name=s;
Packit 1c1d7e
    if (parse_sec==GEN_SEC)
Packit 1c1d7e
                    {
Packit 1c1d7e
                      QCString ss=q+" function "+s1+" return "+s2+s3;
Packit 1c1d7e
                      int a=getLine(FUNCTION_T);
Packit 1c1d7e
                      int b=getLine(PROCEDURE_T);
Packit 1c1d7e
Packit 1c1d7e
                      if (a>b) b=a;
Packit 1c1d7e
                      addVhdlType(current->name.data(),b,Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,ss.data(),0,Public);
Packit 1c1d7e
                    }
Packit 1c1d7e
         currP=0;return "";
Packit 1c1d7e
       }
Packit 1c1d7e
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
QCString param(): {QCString s,s1;Token *tok=0;}
Packit 1c1d7e
{
Packit 1c1d7e
[ tok=<PARAMETER_T> ] { param_sec=PARAM_SEC; }
Packit 1c1d7e
                  [ <LPAREN_T>  s1=interface_list() <RPAREN_T>]
Packit 1c1d7e
                   {
Packit 1c1d7e
                       if(tok)
Packit 1c1d7e
                     {
Packit 1c1d7e
                      s = tok->image.data();
Packit 1c1d7e
Packit 1c1d7e
                    }
Packit 1c1d7e
                      param_sec=0;
Packit 1c1d7e
                      return s+"("+s1+")";
Packit 1c1d7e
                    }
Packit 1c1d7e
Packit 1c1d7e
 }
Packit 1c1d7e
Packit 1c1d7e
 // -----------------------------------------------------------------
Packit 1c1d7e
 // needed for inline (function/process/procedure) parsing
Packit 1c1d7e
Packit 1c1d7e
void parseInline() :  {}
Packit 1c1d7e
{
Packit 1c1d7e
 process_statement()
Packit 1c1d7e
 | subprogram_declaration()
Packit 1c1d7e
 }