使用Antlr从永无止境的流中解析数据
ANTLR适合从文本后没有EOF的流中解析数据? 根据我的观察,直到收到下一代币的第一个字符之前,Lexer不会发出当前的令牌. 最重要的是 - 除非收到下一个规则的第一个令牌,否则解析器似乎不会发出规则. 这是我尝试过的简单语法: fox: 'quick' 'brown' 'fox' '\r'? '\n' ; 然后,我将生成的解析器与UnbufferedCharsstream和UnbufferedTokenstream一起使用: CharStream input = new UnbufferedCharStream(is); MyLexer lex = new MyLexer(input); lex.setTokenFactory(new CommonTokenFactory(true)); TokenStream tokens = new UnbufferedTokenStream(lex); MyParser parser = new MyPar
4 2024-02-27
编程技术问答社区
Spring Rest模板的使用导致EOFException
在使用Android上使用Spring REST模板时,我正在收到java.io.EOFException. 堆叠式原因是这样的读数: Caused by: java.io.EOFException at libcore.io.Streams.readAsciiLine(Streams.java:203) at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:560) at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813) at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274) at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLCo
0 2024-01-30
编程技术问答社区
哈夫曼编码-标题和EOF
我目前正在基于Java的Huffman算法实现程序,而我正处于需要将编码内容输出到文件的阶段.我对如何实现解码所需的标题和EOF感到有些困惑.对于我的标题目前,我拥有从输入文件及其频率出现的所有唯一值,但是在某些文章中,我看到人们以0或1的形式来代表节点,然后代表频率(我有点困惑通过说什么是符号是什么). 另外,对于eof,据我了解,我像符号一样对其进行编码,以便它被读取和解码,但是我不确定我可以使用什么值来肯定不会出现?我知道它的重量为1,但不确定如何确保它实际上不会在文件中. 解决方案 我不得不这样做一次进行分配,这是我们使用的方法. 编码标头的编码是通过使用0和1来编码树的结构(而不​​是频率)完成的.一个" 0"表示沿着树移动,一个" 1"表示我们在叶子节点.这导致了对树的独特编码的一种预订遍历. 例如,像(((a b)c)(d e)这样的树将被编码为" 0001 a 1 b 1 b 1 c 01 d 1 e",其中a, b,c,d,e是其ASCII形式
0 2024-01-23
编程技术问答社区
fgetc不能识别EOF
下面的程序在各种Solaris/Linux口味上运行良好,但在AIX上不行. 但是,如果我用while(c!=0xff)替换while(c!=0xff)在AIX上运行完全很好. 有什么想法吗?我检查了AIX上的FGETC MAN页面,它应该返回EOF常数! #include #include #include int main() { char c; FILE *fp; fp = fopen("a.txt", "r"); c=fgetc(fp); while(c!=EOF) { c=fgetc(fp); printf("%d",c); } fclose(fp); return 0; } 解决方案 fgetc 是int不是char.所以更改 char c; to int c;
2 2024-01-20
编程技术问答社区
文件末尾的野牛
如果我忘记在我的任何文件的末尾放置一个空线,我的程序会出现语法错误.问题是我的语法预计将结束当前线路.由于不存在新线,野牛会生成语法错误,因为它没有完成规则. 我该如何解决?我尝试制作>返回MY_EOF,但是当我这样做时,Lex撞死了可怕的死亡.我猜我没有打电话的默认eof中有代码.我不知道它们可能是什么功能.使用EOF创建错误symbol EOF is used, but is not defined as a token and has no rules 解决方案 您可以使用Flex EOF规则将新线附加到输入: > { static int once = 0; return once++ ? 0 : '\n' } 其他解决方案 在您的Lex文件中 #define yyterminate() return token::END 在您的YACC文件中 %token END 0 "end of file" 其他解决方案
4 2023-12-24
编程技术问答社区
nasm linux x64 我如何找到和cmp EOF来停止从文件到屏幕的数据打印?
nasm linux x64我如何找到和cmp eof停止从文件打印数据到屏幕 section .data Nile_2 db '/home/mark/Desktop/mynewfile.txt', 0; section .bss fd_out resd 4 ; use this here instead of resb so there is enough room for long file names fd_in resd 4 info resd 26 section .text global _start ;must be declared for using gcc _start: ;open the file for reading mov rax, 5 mov rbx, Nile_2 ; was file_name mov rcx, 0 ;for read
2 2023-12-16
编程技术问答社区
为什么我需要多个EOF(CTRL+Z)字符?
作为一个有点背景,我是C编程语言的新手,因此,我一直在尝试通过第二版Kernighan&Ritchie手册中的某些练习进行工作.我确实意识到,我可能会通过更多地利用标准库来更简洁地处理某些问题,但是我正在尝试使我对有用命令的曲目尽可能同步. . 如果它有所不同,我将使用Tiny C编译器(TCC)在Windows XP环境中编译我的源,并在XP控制台(cmd.exe)中执行二进制文件. 问题:End-of-File (EOF) characters的处理.我将一个小的测试用例汇总为说明问题.该程序似乎可以处理EOF字符(部分).我将尝试通过样本输入/输出来演示问题. #include int main() { int character, count; character = 0; character = getchar(); for (count = 0; character != EOF; ++count
2 2023-12-09
编程技术问答社区
窗口下的EOF值
我写了此代码: #include int main() { int c; while ((c = getchar()) != EOF) putchar(c); return 0; } 在Windows下,我发现我必须输入CTRL+Z,以便我可以停止程序,还打印了EOF的值,它是-1. 但是,当我输入-1而不是ctrl+z时,程序继续执行,我想了解原因.谢谢! 解决方案 输入"-1"作为文本不返回整数值-1,而是两个字符,即A '-'(对应于ASCII值45)和A '1'(对应于ASCII值49).两者都不比较等于EOF(十进制中的-1). 根据定义,您不能输入getchar()被消耗为负值的东西,因为负值被定义为表示"文件终结". 如果要读取积分值(例如-1),请使用scanf: int num; if (scanf("%d", &num)==1) { // successfully r
2 2023-12-06
编程技术问答社区
如何在Windows上用Python处理含有EOF/Ctrl-Z字符的巨大文本文件?
我需要使用Python脚本来处理许多大型逗号的文本文件(最大的是约15GB).问题在于,文件中间散发地包含DOS EOF(CTRL-Z)字符. (不要问我为什么,我没有生成它们.)另一个问题是文件在Windows机器上. 在Windows上,当我的脚本遇到这些字符之一时,它假设它在文件的末尾并停止处理.由于各种原因,我不允许将文件复制到任何其他机器.但是我仍然需要处理它们. 这是我到目前为止的想法: 以二进制模式读取文件,抛出等于chr(26)的字节.这会起作用,但大约需要永远. 使用sed之类的东西来消除EOF字符.不幸的是,据我所知,Windows上的sed有相同的问题,并且在看到EOF时会退出. 使用某种Notepad程序并进行重新定位.但事实证明,Notepad -type程序不能很好地与15GB文件相处. 我的理想解决方案是将文件读为文本而只是忽略CTRL-Z字符的某种方法.有没有合理的方法来实现这一目标? 解决方案 很容易使用python删
4 2023-12-05
编程技术问答社区
C++中的cin和CTRL+Z问题
我正在阅读C ++底漆第五次,我的练习有一点问题: 阅读CIN中的一系列单词,并存储值一个向量.后 您已经阅读了所有单词,处理矢量并将每个单词更改为 大写.将转换的元素打印到一行. 我的代码是: #include #include #include #include using std::vector; using std::string; using std::cin; using std::cout; using std::endl; int main(){ vector words; string wordBuffer; vector output(1); while (cin >> wordBuffer){ words.push_back(wordBuffer); } for (st
6 2023-12-05
编程技术问答社区
文件中的特殊字符退出Perl中的while循环
我为.txt文件编写了一个简单的解析器,其中包含以下说明: my $file2 = "test.txt"; open ($process, ") { ... } 在我试图解析的某些文件中,有一个特殊的字符,就像正确的箭头( - >),我无法从文件粘贴在这里. 每次解析器击中该字符( - >)时,它都会退出文件而不对其进行处理直到结束. 有没有办法避免它并继续处理文件直到最后? 我正在使用perl 5.6.1(我不能使用较新的),我需要处理的文件可能具有这些特殊字符. 感谢您的帮助. 解决方案 我不认为是perl会导致您的问题,但几乎可以肯定的是,在那个中间缺失的障碍物中.您是否在文件输入的while block中使用评估?这是一个最小示例,表明包含 - >的流并不会引起困难: #!/
8 2023-12-03
编程技术问答社区
当scanf EOF循环发生错误时
我是C的初学者,我有问题我无法弄清楚,并且无法在其他线程上找到解决方案. 我正在尝试从键盘输入/txt文件读取以下代码的整数: int grades[MAX_GRADES_LENGTH]={0}, histogram[HISTOGRAM_SIZE]={0}; int maxGradesHistogramBucket=0, median=0, gradesLength=0; double avg=0.0; int grade=0; printf("Enter grades:\n"); while (scanf("%d",&grade) != EOF) { grades[gradesLength]=grade; gradesLength=gradesLength+1; } 我应该在等级[]数组中设置这些"等级",并计算沿环数阵列的长度. 以某种方式循环是行为不端的,似乎有些输入可以对循环进行,但是对于某些输入(实际上是大多数)(实际上是其中的大多数),S
4 2023-12-03
编程技术问答社区
Java,需要一个while循环才能达到eof。i、 e.while!eof,继续分析
我目前有一个工作解析器.它一次解析一个文件(不是我想要的),然后将解析的数据输出到文件中.我需要它继续解析并附加到同一输出文件,直到输入文件结束为止.看起来像这样. try { // my code parsing the data and appending to eof of output. (works) } catch (EOFException eof){ } 除了while循环外,所有工作都完成了.当我需要进行解析时,它只会解析一次.我正在寻找一段时间循环功能以达到EOF. 我也使用DatainputStream.是否有某种datainputStream.hasnext函数? DataInputStream dis = new DataInputStream(new FileInputStream(inFile)); i.e. dis.read(); . //Need a while !eof while loop try { // my co
4 2023-12-03
编程技术问答社区
在C语言中使用scanf在EOF处退出一个while循环
我正在为我的介绍性C课程编写一些非常小的程序.其中一个要求我阅读双重值,每行1个数字,然后在EOF之后打印出基本统计信息.这是我的代码部分给我问题: double sample[1000000]; int result; double number; int i = 0; int count = 0; double sum = 0; double harmosum = 0; result = scanf(" %lf \n", &number); double min = number; double max = number; while(result != EOF){ sample[i] = number; if(number max){ max = number; } sum += number; if(num
2 2023-12-03
编程技术问答社区
如何使用feof(FILE *f)?
我在循环时遇到困难,应该停止 当我们到达文件末尾时.这是循环代码: do { if (pcompanyRow[0] != '#' && pass == 1) { strtok(pcompanyRow, ":"); pcompanyName = strcpy(pcompanyName, strtok(NULL, "")); pass = 2; fgets(pcompanyRow, 1024, f); } if (pcompanyRow[0] != '#' && pass == 2) { strtok(pcompanyRow, ":"); pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , "")); pass = 3; fgets(pcompanyRow, 1024 ,
0 2023-12-03
编程技术问答社区
为什么我在使用fgets时要输入3次EOF?
基本上,我想将我写入的所有内容复制到stdin(包括newline char)中,以将其串起以进行哈希目的.我设法实现了这一点,并制作了小型代码来表示我的问题. #include #include #include #define BUFFERSIZE 10000 int main() { char *myStr = calloc(1,1); char buffer[BUFFERSIZE]; while( fgets(buffer, BUFFERSIZE , stdin) != NULL ){ myStr = realloc(myStr, strlen(myStr)+1+strlen(buffer) ); strcat( myStr, buffer ); } printf("\n%s\n",myStr); } 当我输入一些文本时,一切都起作用,然后按Enter和调用EOF. 但是,当我启动程序
6 2023-12-03
编程技术问答社区
为什么 "while( !eof(file)) "总是错误的?
使用feof()控制读取循环是什么问题?例如: #include #include int main(int argc, char **argv) { char *path = "stdin"; FILE *fp = argc > 1 ? fopen(path=argv[1], "r") : stdin; if( fp == NULL ){ perror(path); return EXIT_FAILURE; } while( !feof(fp) ){ /* THIS IS WRONG */ /* Read and process data from file… */ } if( fclose(fp) != 0 ){ perror(path); return EXIT_FAILURE; }
8 2023-12-03
编程技术问答社区
处理SIGCHLD将返回EOF给父亲,为什么?
我有一个小外壳,可以创建孩子(带叉()),并使他们用execvp执行一些命令. 它还支持&选项,以便父亲可以在同时运行其他命令. 当一个孩子死后,我想在控制台上写下它,也想在孩子的pid上写,所以我为sigchld定义了一个sighandler: void backdeadchild(int sig) { int pid, exitstat; pid = wait(&exitstat); printf("Child with pid: %d died", pid); } 问题在于处理程序在打印消息后,父亲也关闭了. 我设法理解Sigchld返回Stdin中的EOF(每当父亲收到EOF关闭时),但是为什么Sigchld返回EOF? 如果正常..如何避免父亲关闭? 解决方案 如果孩子的stdout(或任何其他流)连接到父母的stdin,则父母会收到EOF. . 或者父母可能死于SIGPIPE(损坏的管道)信号,如果父母不处理它.
6 2023-11-26
编程技术问答社区
为什么Ctrl-Z不触发EOF?
为什么 ctrl + z 不会触发循环以在以下小程序上完成? #include main() { int c; while ((c = getchar()) != EOF) { //nothing } return 0; } 如果我输入:test^ZEnter,它不会离开循环. 我发现了有关( )但是,没有一个为Windows下的C(不是C ++)解释的. 注意:我在Windows 8.1 上使用Visual Studio 2015 Pre 解决方案 您需要击中 enter ,然后使用 ctrl + z ,然后 enter 再次. 或,您也可以使用 f6 其他解决方案 EOF就像您使用的那样,它不是字符.这是该流的状态. 我的意思是,哎呀,您甚至链接了这个问题,所以您也可以 P> eof的基本形式是零长度读取. 这不是" eof conture".
0 2023-11-20
编程技术问答社区
Vim在最后一行没有行尾或eof
我试图设置VIM以跳过最后一行或EOF添加EOL,我尝试了此 :set binary :set noeol :w 这不是完美的原因,原因是二进制替代filetype供以后使用. 设置此设置的任何其他选项,我在最后一行中不需要newline. 解决方案 这更好,我在某个地方找到了: au BufWritePre * :set binary | set noeol au BufWritePost * :set nobinary | set eol 其他解决方案 我想添加一个我认为很有用的答案.选定的答案始终即使可以从文件开始,请删除文件上的EOL.这可能是您想要的行为,也可能不是.我认为,我想在我最初打开文件时保存 eol. 我建议的是稍作修改.将set binary放在.vimrc文件的顶部.这样,任何文件都将在二进制模式下打开.如果他们没有EOL,那么VIM将检测到它并将其留下NOEOL.如果他们有一个EOL,那么它将识别为具有EOL并离开它.
2 2023-11-19
编程技术问答社区