|
|
%{
|
|
|
/* C++ string header, for string ops below */
|
|
|
#include <string>
|
|
|
#include <QString>
|
|
|
/* Implementation of yyFlexScanner */
|
|
|
#include "vhdl_scanner.h"
|
|
|
#include <QDebug>
|
|
|
/* define to keep from re-typing the same code over and over */
|
|
|
#define STOKEN( x ) ( new QString( x ) )
|
|
|
|
|
|
/* define yyterminate as this instead of NULL */
|
|
|
//#define yyterminate() return( token::END )
|
|
|
|
|
|
/* msvc2010 requires that we exclude this header file. */
|
|
|
#define YY_NO_UNISTD_H
|
|
|
|
|
|
|
|
|
|
|
|
#define YY_USER_ACTION yycolumn += yyleng;
|
|
|
|
|
|
%}
|
|
|
%option debug
|
|
|
%option nodefault
|
|
|
%option yyclass="vhdl_Scanner"
|
|
|
%option case-insensitive yylineno
|
|
|
%option noyywrap
|
|
|
%option c++
|
|
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
/*Separators*/
|
|
|
[ \t]+ { } //skip new lines, blanc spaces and tabulations
|
|
|
/*-----------------------------------------------------------*/
|
|
|
\n {yycolumn=1;}
|
|
|
|
|
|
\x0d\x0a {yycolumn=1;}
|
|
|
|
|
|
/*comment*/
|
|
|
--.* {
|
|
|
this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::comment,yylineno, yycolumn-yyleng));
|
|
|
}
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/*Reserved words*/
|
|
|
|
|
|
abs |
|
|
|
after |
|
|
|
all |
|
|
|
and |
|
|
|
assert |
|
|
|
buffer |
|
|
|
bus |
|
|
|
disconnect |
|
|
|
else |
|
|
|
elsif |
|
|
|
exit |
|
|
|
generate | /* don't parse generate as block! just look for "if" or "for" */
|
|
|
group |
|
|
|
guarded |
|
|
|
impure |
|
|
|
in |
|
|
|
inertial |
|
|
|
inout |
|
|
|
label |
|
|
|
linkage |
|
|
|
literal |
|
|
|
mod |
|
|
|
nand |
|
|
|
new |
|
|
|
next |
|
|
|
nor |
|
|
|
not |
|
|
|
null |
|
|
|
on |
|
|
|
open |
|
|
|
or |
|
|
|
others |
|
|
|
out |
|
|
|
postponed |
|
|
|
pure |
|
|
|
register |
|
|
|
reject |
|
|
|
rem |
|
|
|
rol |
|
|
|
ror |
|
|
|
select |
|
|
|
severity |
|
|
|
sla |
|
|
|
sll |
|
|
|
sra |
|
|
|
srl |
|
|
|
then |
|
|
|
transport |
|
|
|
unaffected |
|
|
|
until |
|
|
|
when |
|
|
|
with |
|
|
|
xnor |
|
|
|
xor |
|
|
|
(true|false) {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::keyword,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
return {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::return_t,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
when {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::when,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
begin {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::begin,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
is {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::is,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
port {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::port,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
generic {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::generic,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
map {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::map,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
loop {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::loop,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
range {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::range,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
array {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::array,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
access {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::access,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
file {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::file,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
alias {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::alias,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
report {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::report,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
body {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::body,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
of {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::of,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
to |
|
|
|
downto {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::direction,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
block |
|
|
|
configuration |
|
|
|
for |
|
|
|
if |
|
|
|
while |
|
|
|
protected {
|
|
|
this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::block,yylineno, yycolumn-yyleng));
|
|
|
}
|
|
|
|
|
|
case {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::caseKw,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
|
|
|
wait {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::wait,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
process {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::process,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
component {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::component,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
package {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::package,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
architecture {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::architecture,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
record {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::record,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
entity {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::entity,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
procedure {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::procedure,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
function {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::function,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
units { this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::units,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
library |
|
|
|
use {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::clause,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
constant {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::constant,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
subtype {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::subtype,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
type {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::type,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
attribute {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::attribute,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
variable {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::variable,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
signal {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::signal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
shared {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::shared,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
end {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::endKw,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
|
|
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/*identifier (may be a reserved word)*/
|
|
|
[a-z][a-z0-9\_\.]*[a-z0-9]+ |
|
|
|
[a-z]+ |
|
|
|
\\.*\\ {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::identifier,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/*abstract literal (integer or floating point type)*/
|
|
|
/*Numerical literals*/
|
|
|
|
|
|
[0-9]+\#[a-f0-9]+\# {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
(\+|\-)?([0-9\_]+)|(\+|\-)?([0-9\_]+E[0-9\_]+)|((2|3|4|5|6|7|8|9|10|11|12|13|14|15|16)\#[0-9\_]\#) {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
(\+|\-)?[0-9\_]+\.[0-9\_]+|[0-9\_]+\.[0-9\_]+E[0-9\_]+ {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
\'(0|1)\' {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
\'.\' {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
|
|
|
(\+|\-)?([0-9\_]+)(fs|ps|ns|us|ms|sec|min|hr) {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
/*Bit string literals*/
|
|
|
[\"\”][0-1\_\-]+[\"\”] {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
|
|
|
x[\"\”][0-9A-F\_]+[\"\”] {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
o[\"\”][0-7\_]+[\"\”] {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
/*String literals*/
|
|
|
[\"\”][^\"\n]*[\"\”] {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
/*The NULL literal*/
|
|
|
|
|
|
\[NULL\] {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::literal,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/*character literal (a graphical character surrounded by ‘, e.g.: ‘H’)*/
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/*string literal (a sequence of graphical characters surrounded by ”, e.g.: ”HAR-DI”)*/
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/* bit string literal (a sequence of extended digits * surrounded by ”, e.g.: ”011”)*/
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/* delimiter*/
|
|
|
\. |
|
|
|
\| |
|
|
|
\[ |
|
|
|
\] |
|
|
|
\>\= |
|
|
|
\/\= |
|
|
|
\= |
|
|
|
\> |
|
|
|
\< |
|
|
|
\& |
|
|
|
\‘ |
|
|
|
\' |
|
|
|
\’ |
|
|
|
\* |
|
|
|
\+ |
|
|
|
\- |
|
|
|
\/ |
|
|
|
\*\* {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::separator,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
\<\= {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::leSym,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
\=\> {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::arrow,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
\:= {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::varAsgn,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
\<\> {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::box,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
\, {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::comma,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
|
|
|
\: {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::colon,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
|
|
|
\( {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::leftParen,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
\) {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::rightParen,yylineno, yycolumn-yyleng));}
|
|
|
|
|
|
|
|
|
\; {this->appendNode(new VHDL_Tools::VHDL_AST_Node(YYText(),VHDL_Tools::semicolon,yylineno, yycolumn-yyleng)); }
|
|
|
|
|
|
. printf("bad input character '%s' at line %d column %d\n ", yytext, yylineno,yycolumn-yyleng);
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|