我的 Flex 文件输出错误

2024-01-05

我编写了一个 .l 文件并希望输出“c17.isc”中的内容。

但有一个错误我不知道为什么。我已经给出了我打算读取的文件、flex文件和执行结果。

这是 c17.isc 文件 内容的意思是

number  gate_name  gate_type  output_number  input_number  fault

带“from”的行表示扇出。 有2个数字的行仅表示输入列表。

*c17 iscas example (to test conversion program only)
*---------------------------------------------------
*
*
*  total number of lines in the netlist ..............    17
*  simplistically reduced equivalent fault set size =     22
*        lines from primary input  gates .......     5
*        lines from primary output gates .......     2
*        lines from interior gate outputs ......     4
*        lines from **     3 ** fanout stems ...     6
*
*        avg_fanin  =  2.00,     max_fanin  =  2
*        avg_fanout =  2.00,     max_fanout =  2
*
* 
*
*
*
    1     1gat inpt    1   0      >sa1
    2     2gat inpt    1   0      >sa1
    3     3gat inpt    2   0 >sa0 >sa1
    8     8fan from     3gat      >sa1
    9     9fan from     3gat      >sa1
    6     6gat inpt    1   0      >sa1
    7     7gat inpt    1   0      >sa1
   10    10gat nand    1   2      >sa1
     1     8
   11    11gat nand    2   2 >sa0 >sa1
     9     6
   14    14fan from    11gat      >sa1
   15    15fan from    11gat      >sa1
   16    16gat nand    2   2 >sa0 >sa1
     2    14
   20    20fan from    16gat      >sa1
   21    21fan from    16gat      >sa1
   19    19gat nand    1   2      >sa1
    15     7
   22    22gat nand    0   2 >sa0 >sa1
    10    20
   23    23gat nand    0   2 >sa0 >sa1
    21    19

这是我写的flex文件。

首先,这是声明文件:

# include <stdio.h>
# include <string.h>
# include <stdlib.h>

# define INPT 1
# define NOR 2
# define NAND 3
# define NOT 4
# define XOR 5
# define AND 6
# define BUFF 7
# define FROM 8

其次,这是 Flex 文件:

%{
# include "declare.h"

/*gi=1,it's input;gi=7,it's fanout;otherwise,it's gate*/
int gi=-1;
int inum=0;
int val;


struct{
    char *symbol;
    int val;
} symtab[]={
"inpt", INPT,
"nor", NOR,
"nand", NAND,
"not", NOT,
"xor", XOR,
"and", AND,
"buff", BUFF,
"from",FROM,
"0",0
};

extern FILE *yyin;
%}

%start A B C D E

DIGITS [0-9]+
BLANK [ \t\n]+
ALPHA [a-z]+

%%

"*".*\n     {ECHO; BEGIN A;}

<A>{BLANK}{DIGITS} {printf("num=%s\t",yytext); BEGIN B;}
<B>{BLANK}{DIGITS}{ALPHA} {printf("name=%s",yytext); BEGIN C;}
<C>{BLANK}{DIGITS} {printf("op=%s\t",yytext);BEGIN D;}
<C>{BLANK}{DIGITS}{ALPHA} {ECHO; BEGIN A;}
<D>{BLANK}{DIGITS} {inum=atoi(yytext);
                    printf("ip=%s\t",yytext);
                    if(gi==1)
                    {BEGIN A;}
                    if(gi!=1)
                    {BEGIN E;}
                   }

<E>{BLANK}{DIGITS} {inum--;
                    if(inum<0)
                    {printf("num=%s\t",yytext); BEGIN B;}
                    else
                    {printf("il=%s\t",yytext); BEGIN E;} 
                   }


{ALPHA} {gi=lookup(yytext);
         if(gi!=0) printf("\tty=%d\t",gi);
         else ECHO;

         }

{BLANK}">sa"[0-1] {val=atoi(&yytext[yyleng-1]);printf("\tfl=%d",val);}

{BLANK}    ;



%%
lookup(s)
char* s;
{int i;
for (i=0;symtab[i].val!=0;i++)
{
if(strcmp(symtab[i].symbol,s)==0)
break;
}
return(symtab[i].val);
}

main()
{
FILE *x=fopen("c17.isc","r");
yyin=x;
yylex();
}

这是执行结果。我用*标记了错误的地方。基本上错误发生在输入列表的行上。

例如,图中第一行错误的行应该是“num=10”,第二个错误行应该是“il=1 il=8" etc.

我对flex文件中输入列表的操作位于E部分。但我不知道为什么它不起作用。

num=1  name=1gat  ty=1  op=1  ip=0  fl=1
num=2  name=2gat  ty=1  op=1  ip=0  fl=1
num=3  name=3gat  ty=1  op=2  ip=0  fl=0  fl=1
num=8  name=8fan  ty=8  3gat  fl=1
num=9  name=9fan  ty=8  3gat  fl=1
num=6  name=6gat  ty=1  op=1  ip=0  fl=1
num=7  name=7gat  ty=1  op=1  ip=0  fl=1
**il=10**  name=10gat  ty=3  op=1  ip=2  fl=1
**num=1**  il=8
**il=11**  name=11gat  ty=3  op=2  ip=2  fl=0  fl=1
**num=9**  il=6
**num=4**  ...
**num=5**  ...
**il=16**  ...
**num=2**  il=14
**num=0**  ...
**num=1**  ...
**il=19**  ...
**num=15** il=7
**il=22**  ...
**il=23**  ...

您的代码的这种改编似乎可能会按您的预期工作。有各种变化,最显着的是输出一些换行符,并明确在哪里num=零件被识别。

%{
#include "declare.h"

/*gi=1, it's input;gi=7, it's fanout;otherwise, it's gate*/
static int gi = -1;
static int inum = 0;

extern int lookup(const char *s);

struct
{
    char *symbol;
    int val;
} symtab[]=
{
    {   "inpt", INPT },
    {   "nor",  NOR  },
    {   "nand", NAND },
    {   "not",  NOT  },
    {   "xor",  XOR  },
    {   "and",  AND  },
    {   "buff", BUFF },
    {   "from", FROM },
    {   "0",    0    },
};

extern FILE *yyin;
%}

%start A B C D E

DIGITS [0-9]+
BLANK [ \t\n]+
ALPHA [a-z]+

%%

"*".*\n              {ECHO; BEGIN A;}

<A>{DIGITS}          {printf("\nnum1=%s\t", yytext); BEGIN B;}
<B>{DIGITS}{ALPHA}   {printf(" name=%s\t",  yytext); BEGIN C;}
<C>{DIGITS}          {printf(" op=%s\t",    yytext); BEGIN D;}
<C>{DIGITS}{ALPHA}   {ECHO; BEGIN A;}
<D>{DIGITS}          {
                     inum=atoi(yytext);
                     printf(" ip=%s\t", yytext);
                     if (gi==1)
                     {BEGIN A;}
                     if (gi!=1)
                     {BEGIN E;}
                     }

<E>{DIGITS}          {inum--;
                     if (inum<0)
                     {printf("\nnum2=%s\t", yytext); BEGIN B;}
                     else
                     {printf(" il=%s\t", yytext); BEGIN E;} 
                     }

{ALPHA}              {
                     gi = lookup(yytext);
                     if (gi!=0) printf(" ty=%d (%s)\t", gi, yytext);
                     else { printf("Lookup failed: "); ECHO; }
                     }

">sa"[0-1]           {int val=atoi(&yytext[yyleng-1]);printf(" fl=%d", val);}

{BLANK}              ;
.                    { printf("Unmatched: %s\n", yytext); }

%%
int lookup(const char *s)
{
    int i;
    for (i = 0; symtab[i].val != 0; i++)
    {
        if (strcmp(symtab[i].symbol, s) == 0)
            break;
    }
    return(symtab[i].val);
}

int main(void)
{
    FILE *x=fopen("c17.isc", "r");
    yyin=x;
    yylex();
    putchar('\n');
}

对于您的示例输入,输出为:

*c17 iscas example (to test conversion program only)
*---------------------------------------------------
*
*
*  total number of lines in the netlist ..............    17
*  simplistically reduced equivalent fault set size =     22
*        lines from primary input  gates .......     5
*        lines from primary output gates .......     2
*        lines from interior gate outputs ......     4
*        lines from **     3 ** fanout stems ...     6
*
*        avg_fanin  =  2.00,     max_fanin  =  2
*        avg_fanout =  2.00,     max_fanout =  2
*
* 
*
*
*

num1=1   name=1gat   ty=1 (inpt)     op=1    ip=0    fl=1
num1=2   name=2gat   ty=1 (inpt)     op=1    ip=0    fl=1
num1=3   name=3gat   ty=1 (inpt)     op=2    ip=0    fl=0 fl=1
num1=8   name=8fan   ty=8 (from)    3gat fl=1
num1=9   name=9fan   ty=8 (from)    3gat fl=1
num1=6   name=6gat   ty=1 (inpt)     op=1    ip=0    fl=1
num1=7   name=7gat   ty=1 (inpt)     op=1    ip=0    fl=1
num1=10  name=10gat  ty=3 (nand)     op=1    ip=2    fl=1 il=1   il=8   
num2=11  name=11gat  ty=3 (nand)     op=2    ip=2    fl=0 fl=1 il=9  il=6   
num2=14  name=14fan  ty=8 (from)    11gat fl=1
num1=15  name=15fan  ty=8 (from)    11gat fl=1
num1=16  name=16gat  ty=3 (nand)     op=2    ip=2    fl=0 fl=1 il=2  il=14  
num2=20  name=20fan  ty=8 (from)    16gat fl=1
num1=21  name=21fan  ty=8 (from)    16gat fl=1
num1=19  name=19gat  ty=3 (nand)     op=1    ip=2    fl=1 il=15  il=7   
num2=22  name=22gat  ty=3 (nand)     op=0    ip=2    fl=0 fl=1 il=10     il=20  
num2=23  name=23gat  ty=3 (nand)     op=0    ip=2    fl=0 fl=1 il=21     il=19

该行与num1=10 has il=1 and il=8与之相关,这似乎反映了数据。 (我修改了打印输出以包括类型名称和类型编号。)

我不确定哪些变化是重要的。失去了{BLANK}我认为,匹配数字和 alpha 的部分规则简化了事情(扫描仪基本上忽略间距是很常见的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 Flex 文件输出错误 的相关文章

  • gitlab - 使用 access_token 推送到存储库

    我实现了 oauth2 Web 流程 以便从我的应用程序的用户获取 access token 使用 access token 我想执行以下操作 获取用户信息 为该用户创建一个存储库 将代码推送到此存储库 使用 git push 我已经成功获
  • 向 bison/jison 计算器语言添加函数

    我正在尝试扩展吉森计算器示例 http zaach github io jison try 具有一些简单的功能 我对解析和 bison jison 相当陌生 但这是我到目前为止所拥有的一些内容 lexical grammar lex var
  • Codeigniter ajax CSRF问题

    我制作了一个简单的自动加载功能 当您在网站上向下滚动时加载内容 但是 当我在 Codeigniter 中启用 CSRF 保护时 似乎存在一些问题 我没有使用表单 所以当我在滚动时执行发布请求时 我不知道如何将令牌从 A 发送到 B 我的 J
  • 在 PHP 中生成单次使用令牌:random_bytes 还是 openssl_random_pseudo_bytes?

    我需要在 PHP 中生成一次性令牌 我可以使用两个函数来完成同样的事情 随机字节 http php net random bytes and openssl random pseudo bytes http php net openssl
  • 野牛规格和优先顺序

    给定 Bison 规范 right TOK ADD TOK MUL 我想知道 TOK ADD 和 TOK MUL 的优先顺序是什么 另外如果我有野牛规格 left TOKMUL TOKADD left TOKDIV left TOKSUB
  • 使用 Firebase-PHP 验证 Firebase ID 令牌

    我正在使用 Firebase Auth 在以 PHP 编码的网络应用程序上授权用户 授权本身是用 Javascript 进行的 它在 Ajax 请求上执行以验证用户是否已登录 要在我已经实现的服务器上使用 Firebase AdminFir
  • 令牌访问中的 Google oAuth2 redirect_uri_mismatch

    我正在尝试使用 Google oAuth2 从一次性代码访问令牌 但我收到一条错误消息redirect uri mismatch在回应中 不过我已经添加了redirect uri在控制台中 我有我的Authorized redirect u
  • 对 yyparse 的未定义引用(flex 和 bison)

    我正在尝试学习一些 Flex Bison 并且正在阅读 John Levine O Reilly 的 Flex Bison 有一个我需要运行的示例 但是我无法运行它 因为出现以下错误 tmp ccKZcRYB o In function y
  • 用于多行注释的 Unix Flex 正则表达式

    我正在 Unix 上使用 Flex 制作词法分析器 如果您之前使用过它 您就会知道您主要只是为您为其编写词法分析器的任何语言的标记定义正则表达式 我被困在最后一部分 我需要正确的正则表达式来进行多行注释 以允许类似的事情 This is a
  • 唯一的表单令牌禁用用户的多任务处理

    如果我想保护我的网站和用户免受跨站伪造 CSRF 攻击 我可以生成一个唯一的令牌 token md5 time rand on 每一页有一个形式 令牌在隐藏的输入字段中提交echo
  • 当 Firebase 刷新服务器上现有的 Firebase 令牌时,我应该如何更新它?

    这个问题是关于设备组以及如何有效地跟踪有效令牌 我看到的问题是 当设备上刷新令牌并将其发送到服务器时 您将如何识别不再有效的旧令牌 设备令牌用于识别设备 但它已被更改 因此设备和旧令牌之间不再有任何关系 我是否应该时不时地检查属于设备组的所
  • 如何使用用户名和密码获取github令牌

    我正在使用 rhodes 开发移动应用程序 我想访问 github 的私人仓库 我只有用户名和密码 如何获取给定用户名和密码的令牌 一旦您只有登录名和密码 您就可以使用基本身份验证来使用它们 首先 检查此代码是否显示所需存储库的 json
  • 如果用户通过oauth2授权对应用程序进行授权,如何刷新Linkedin oauth token?

    我需要刷新用户 linkedin 访问令牌 而无需他们重新执行初始授权过程 我也看过这个文档http developer linkedin com documents exchange jsapi tokens rest api oauth
  • 如何在调度代码时自动选择R中googlesheets4中的预授权帐户?

    我试图弄清楚自动允许 googlesheet4 包选择我的预授权帐户来下载特定谷歌表格的方法是什么 例如 我想每天运行以下一次 library googlesheets4 delta lt read sheet https docs goo
  • Lucene 3 上的“令牌”列表

    我是 Lucene 的新手 我开始学习版本 3 分支 但有一件事我不明白 显然是因为我在该主题上没有经验 在 Lucene 2 9 中 如果我想要一个令牌列表 我会创建一个 Token 类的 ArrayList 例如 ArrayList 这
  • 如何在 C# 中从 USB 令牌读取证书

    我有一个 USB 令牌 其中包含一个加密证书 该证书具有公钥和私钥 现在我想用 C 创建一个应用程序 通过它我可以找到可访问的证书信息 当我插入 USB 令牌时 它会被检测到 但计算机部分上没有显示任何驱动器 就像闪存驱动器一样 如何从 U
  • 对“yylex()”的未定义引用

    我正在尝试使用 flex 和 bison 创建一种简单的脚本语言 现在 我只是想让计算器工作 但我无法编译它 当我运行这个 makefile 时 OBJECTS hug tab o hug yy o PROGRAM hug exe CPP
  • 无法在 Windows 上安装 Flex(词法分析器),无法找到全面的说明

    这学期我在大学上一门关于 Flex Bison 的课程 在尝试让 Flex 工作时遇到了严重的问题 可能是由于我自己的无能 但我正在寻找一个非常非常难以研究的解决方案 我正在尝试使用命令提示符导航到包含 l Lex 文件的文件 然后使用 F
  • “WSGIRequest”对象没有属性“successful_authenticator”

    我已经创建了一个像这样的身份验证类 RESTful API 的令牌身份验证 是否应该定期更改令牌 https stackoverflow com questions 14567586 token authentication for res
  • 无法从 Facebook 获取访问令牌。收到 OAuthException 提示“验证验证码时出错”

    我正在使用 java 我的演示应用程序的目的很简单 更新用户状态 我跟着服务器端流程在页面上http developers facebook com docs authentication http developers facebook

随机推荐

  • 为什么我的函数在修改数组时会更改参数? [复制]

    这个问题在这里已经有答案了 我不希望 foo 在此示例中发生任何更改 但是当我将其修改为函数中的数组时 它会更改参数 注意 foo 没有被 function1 改变 我猜是因为它没有直接修改参数 任何避免这种情况的帮助将不胜感激 http
  • 我应该使用哪一个? “docker Kill”还是“docker stop”?

    Will docker stop如果容器内运行的进程无法停止 则会失败 如果我使用docker kill 容器内未保存的数据可以保留吗 Is docker stop相比之下耗时docker kill 我想关闭容器 但不会丢失任何数据 没有高
  • 在 mongodb 中创建同名数据库?

    我发现可以创建具有相同名称的数据库 因此当我需要指定要使用哪些数据库时 具有相同名称的数据库会导致问题 事情是这样发生的 我已经有一个名为 test1 的数据库 它只存储带有文档的集合 然后 我用它来使用 GridFS 存储文件 因此它包含
  • 表行上的材质波纹效果

    我正在玩谷歌材料设计引导主题菲斯瓦斯塔 https github com FezVrasta bootstrap material design 大多数组件工作并且看起来都很棒 但是表行上的连锁反应对我来说不能正常工作 Demo jsfid
  • OpenERP 服务器错误 访问被拒绝

    安装 Odoo 后 我进入了 Web 面板 它要求创建新数据库 当我输入详细信息时出现错误 我可以成功更改主密码 我已经在 putty 上创建了数据库 并且 etc 文件夹下没有 openerp server conf 文件 Odoo Op
  • Javascript 有类似 VBA 的 DoEvents 的东西吗?

    我的代码中有一个长时间运行的 for 循环 我想延迟循环来处理事件队列中的其他任务 例如按下按钮 javascript 或 JQuery 有什么可以帮助我的吗 基本上我正在尝试做一些类似于延迟循环的事情 如下所示 https support
  • 带有“悬停”触发器的 AngularStrap bs-dropdown 没有保持打开足够长的时间

    当使用带有 悬停 触发器的 bs dropdown 时 菜单保持可见的时间不够长 无法允许用户单击菜单项 http plnkr co edit Fi39BdCOqHXnPAgITD01 p preview http plnkr co edi
  • 导入 scikits.talkbox 时出错

    我想使用 scikits talkbox 但在导入 scikits talkbox 时出现以下错误 回溯 最近一次调用最后一次 文件 home seref Desktop machinelearningcodes MFCC main py
  • 两个鸡蛋掉落拼图变化:未知/无限楼层

    Preface 这个问题的灵感来自于上周 SO 上的一个类似问题 该问题在弄清楚真正的问题是什么之前就被删除了 我认为这种变化提出了一个我想分享的好问题 两个鸡蛋问题 详细的定义和解决方案可以找到here https brilliant o
  • Dotfuscator 如何工作?

    Dotfuscator 如何工作 我尝试混淆我的一些类 并将方法 类重命名为 a b c 等 但我仍然可以看到这些方法中的代码 难道是我做错了什么 有什么可以阻止完全阻止拆卸我的组件吗 代码混淆远远超出了类 成员和变量的简单重命名 尽管这是
  • 在 Coldfusion 中使用 Unicode 字符解析 XML

    我正在使用 cfhttp 连接到外部 API 返回的数据为 XML 格式 我无法控制 API 或其返回的格式 当数据返回时 我循环遍历它并执行 cfquery 插入到我自己的 MySQL 数据库中 该数据库具有 UTF8 字符集 但是 某些
  • 如何获取已注册COM接口的IID?

    我知道我可以从注册表中的 COM 类对象读取 CLSIDClasses
  • 数据绑定到嵌套属性 - 无法绑定属性或列 (Winforms)

    我们正在使用 Windows 窗体运行 NET 4 0 应用程序 该应用程序对两种不同类型的对象使用单一表单 namespace NetIssue public partial class Form1 Form B myObj public
  • PowerShell 字符串插值语法

    我总是使用以下语法来确保变量在字符串中扩展 my string with a variable 我最近遇到了以下语法 my string with a variable 它们相等吗 有什么区别吗 tl dr Inside 只需要嵌入整个表达
  • ARM 上的快速浮点到整数转换和浮点精度 (iPhone 3GS/4)

    I read http www stereopsis com FPU html http www stereopsis com FPU html 中提到 在 x86 上将 float 转换为 int 的最快方法是什么 https stack
  • 扩展Python中的内置类

    如何扩展 python 中的内置类 我想向 str 类添加一个方法 我已经做了一些搜索 但我发现的只是较旧的帖子 我希望有人知道更新的内容 只需对类型进行子类化 gt gt gt class X str def my method self
  • 为什么 iPhone 请求 .m3u8 播放列表文件 4 次?

    为什么 iPhone 请求 m3u8 播放列表文件 4 次 并且 是否可以让它仅请求一次 请求执行如下 第一个是完整的请求 第二个是字节范围请求 范围为0 1 第三个是完整文件的另一个字节范围请求 最终的请求又是一个完整的请求 注意 iPh
  • 如何查看应用程序当前使用的堆大小?

    我想我在 NetBeans 中将堆大小增加到 1 GB 因为我将配置更改为如下所示 netbeans default options J Xmx1g 重新启动 NetBeans 后 我能否确定我的应用程序现在已获得 1 GB 空间 有没有办
  • 访问应用的外部脚本中的 buildscript 块中定义的类路径依赖项

    我最初的目标是能够使用中定义的类路径依赖项buildscript in build gradle 在导入的脚本内build gradle using apply from 但是 由于无法解析类 因此外部脚本无法编译 研究这个问题后 我发现逻
  • 我的 Flex 文件输出错误

    我编写了一个 l 文件并希望输出 c17 isc 中的内容 但有一个错误我不知道为什么 我已经给出了我打算读取的文件 flex文件和执行结果 这是 c17 isc 文件 内容的意思是 number gate name gate type o