- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我花了两天的时间绞尽脑汁试图找出程序为什么会这样。对于一个类(class)项目,我正在尝试编写一个程序来解析地址并以某种方式输出它。在我真正到达程序的输出部分之前,我只是想确保我的 Bison-fu 实际上是正确的并正确输出一些调试信息。
看起来 Flex 和 Bison 合作得很好,正如预期的那样,但由于某种原因,当我解析地址的第三行时,yytext 只是跳过邮政编码并直接转到新行。
下面是我测试过的 Flex 和 Bison 文件的精简版本,仍然输出与完整版本相同的内容:
[19:45]<Program4> $ cat scan.l
%option noyywrap
%option nounput
%option noinput
%{
#include <stdlib.h>
#include "y.tab.h"
#include "program4.h"
%}
%%
[\ \t]+ { /* Eat whitespace */}
[\n] { return EOLTOKEN; }
"," { return COMMATOKEN; }
[0-9]+ { return INTTOKEN; }
[A-Za-z]+ { return NAMETOKEN; }
[A-Za-z0-9]+ { return IDENTIFIERTOKEN; }
%%
/*This area just occupies space*/
[19:45]<Program4> $ cat parse.y
%{
#include <stdlib.h>
#include <stdio.h>
#include "program4.h"
%}
%union {int num; char id[20]; }
%start locationPart
%expect 0
%token <num> NAMETOKEN
%token <num> EOLTOKEN
%token <num> INTTOKEN
%token <num> COMMATOKEN
%type <id> townName zipCode stateCode
%%
/* Entire block */
locationPart: townName COMMATOKEN stateCode zipCode EOLTOKEN
{ printf("Rule 12: LP: TN COMMA SC ZC EOL: %s\n", yytext); }
| /* bad location part */
{ printf("Rule 13: LP: Bad location part: %s\n", yytext); }
;
/* Lil tokens */
townName: NAMETOKEN
{ printf("Rule 23: TN: NAMETOKEN: %s\n", yytext); }
;
stateCode: NAMETOKEN
{ printf("Rule 24: SC: NAMETOKEN: %s\n", yytext); }
;
zipCode: INTTOKEN DASHTOKEN INTTOKEN
{ printf("Rule 25: ZC: INT DASH INT: %s\n", yytext); }
| INTTOKEN
{ printf("Rule 26: ZC: INT: %s\n", yytext); }
;
%%
int yyerror (char const *s){
extern int yylineno; //Defined in lex
fprintf(stderr, "ERROR: %s at symbol \"%s\"\n at line %d.\n", s, yytext,
yylineno);
exit(1);
}
[19:45]<Program4> $ cat addresses/zip.txt
Rockford, HI 12345
[19:45]<Program4> $ parser < addresses/zip.txt
Operating in parse mode.
Rule 23: TN: NAMETOKEN: Rockford
Rule 24: SC: NAMETOKEN: HI
Rule 26: ZC: INT:
Rule 12: LP: TN COMMA SC ZC EOL:
Parse successful!
[19:46]<Program4> $
正如您在底部附近看到的,它打印 Rule 26: ZC: INT:
但无法打印 5 位邮政编码。就像程序只是跳过数字并存储换行符一样。知道为什么它不存储和打印邮政编码吗?
注释:
-vdy
标志来编译 parse.c 文件最佳答案
如果您想跟踪解析器的工作情况,最好启用 bison 的跟踪功能。这真的很容易。只需添加 -t
或--debug
标记为bison
命令生成代码,然后添加一行以实际生成跟踪:
/* This assumes you have #included the parse.tab.h header */
int main(void) {
#if YYDEBUG
yydebug = 1;
#endif
这在 the Bison manual 中有解释。 ; #if
如果您省略 -t
让您的程序编译旗帜。关于标志的主题,我强烈建议您不要使用 -y
旗帜;它用于编译依赖于某些过时功能的旧 Yacc 程序。如果您不使用-y
,然后 bison 将使用你的 .y
的基名扩展名为 .tab.c
的文件和.tab.h
对于生成的文件。
现在,您的 bison 文件表明您的某些标记具有语义类型,但您的 Flex 操作没有为这些标记设置语义值,并且您的 bison 操作不使用语义值。相反,您只需打印 yytext
的值即可。 。如果您稍微思考一下,您应该能够明白为什么它不起作用。 Bison 是一个前瞻解析器;它根据当前解析状态和查看下一个标记(如果需要)做出解析决策。它通过调用词法分析器来查看下一个标记。当您调用词法分析器时,它会更改 yytext
的值.
Bison(与其他 yacc 实现不同)并不总是查看下一个标记。但在您的邮政编码规则中,它别无选择,因为它无法判断下一个标记是否是 -
或者不看它就不会。在本例中,它不是破折号;而是破折号。这是一个换行符。那么你猜怎么着yytext
当您在邮政编码操作中打印出来时包含。
如果您的分词器要将文本保存在 id
中语义值成员(这就是它的用途),那么您的解析器将能够访问语义值 $1
, $2
,...
关于c - 柔性/Bison : yytext skips over a value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49331561/
我正在做一个项目,我需要一个 skip-gram 模型的预训练向量。我听说还有一个名为 skip-n-gram 模型的变体可以提供更好的结果。 我想知道自己训练模型需要什么?因为我只需要它们来为我的模
我正在尝试实现 EF 提供的分页功能。我以为我只需要将简单的 Skip() 和 Take() 添加到我的查询中,但后来我收到了这条消息: Error 4 'System.Linq.IOrderedQu
到目前为止,我有一个语法一直在使用标准的 boost::spirit::ascii::space/boost::spirit::ascii::space_type 船长。 我有一些使用船长的规则和一些
我正在处理动态数据。 创建动态模型并在global.asax中注册后,如 DefaultModel.RegisterContext(typeof(masterEntities1),new Contex
在 Visual Studio 2013 Update 1 中使用 Entity Framework 6.0.2 和 .NET 4.5.1 DbContext连接到 SQL Server: 我有一个很
我正在创建一个支持动态数据的 ASP.NET 网站。当我从头开始(从 VS 中的模板)创建动态网站时,一切正常。但是,当我尝试添加动态实体 (.edmx) 文件并运行应用程序时,出现以下错误: “Sk
我们可以跳过一个可选参数并为跳过的参数赋值吗? 例如我有一个函数: public function Dialog(message:String,title:String="Note",dialogsi
我创建了一个函数来从我的 firestore 集合中提取一个随机文档,然后返回一个 FIRQuery。得到它后,我创建了一个模型文件来解析我的 firestore 文档中的任何 FIRQuery 数据
我对编程比较陌生,我想尝试看看如何在 Visual Studio 2019 中制作基本的 Windows 桌面应用程序。由于我为按钮添加了代码,所以 C2360 和 C2361 错误不断弹出,但我没有
我正在使用 Data Skipping Indexes clickhouse 中的功能,我对它的用法感到困惑。如果我在创建表时添加数据跳过索引,如下所示: CREATE TABLE MyTable (
我不确定Maven指令-Dmaven.test.skip.exec和-Dmaven.test.skip=true -DskipTests之间的区别是什么。两者似乎都抑制了测试周期。 最佳答案 “mav
假设我有一些神奇的分页黑盒类,它使用 pageIndex 和 pageSize 检索数据,如下所示: public class PaginatedList { // ... // Ch
我计划使用 Bowerjs 来管理前端依赖项,并使用 gulp.js 来连接、缩小和编译前端代码。因此,我想跳过 Rails Assets 管道,包括 sprocket。我运行以下命令来跳过 Asse
我计划使用 Bowerjs 来管理前端依赖项,并使用 gulp.js 来连接、缩小和编译前端代码。因此,我想跳过 Rails Assets 管道,包括 sprocket。我运行以下命令来跳过 Asse
我正在索引页上的 MVC 中进行分页......在这一行我得到了错误 return View( employee.ToPagedList(Page ?? 1,3)); 这里是索引方法 public
我正在搜索关于跳过连接的科学工作。 每个人都在谈论通过网络改进梯度流,这感觉很有意义。但是我很想理解和阅读归根结底的数学和代码意味着什么以及如何在 tensorflow 中深入实现它。 resnet
添加 skip规则不符合我的期望。这是由逗号和空格分隔的一对标记的语法。我制作了一个版本,其中逗号标记为 skip ,还有一个不是: grammar Commas; COMMA: '
将Jupyter用于幻灯片时,是否有默认方法将幻灯片类型设置为跳过新单元格的? 最佳答案 我针对您所要求的解决方法。 创建一个空的“跳过”幻灯片并键入: 退出 C 伏特 伏特 伏特 复制并粘贴许多空的
我正在尝试使用更新 svn update --username myusername https://my.svn.address 但是,我只是收到一条“已跳过”消息? 最佳答案 我猜你遇到了这种类型
Flash 的 MovieClip 时间轴的创建方式可以跳过帧以保持动画平滑度和音频同步。 我的问题是,如果帧上有 ActionScript,是否有可能跳过该帧,从而不调用脚本? 或者有脚本的帧永远不
我是一名优秀的程序员,十分优秀!