当前位置: 技术问答>linux和unix
关于我的作业中的一点小问题(100分)。
来源: 互联网 发布时间:2015-11-22
本文导语: 我的编译原理作业是:做一个snl语言的编译器。 我刚刚写完这个编译器的词法分析部分。 算法很简单,但在Win32下和Linux下有不同的表现: 我用std::getline(std::ifstream, std::string, 'n')读文件的一行, 分析完一行再读一...
我的编译原理作业是:做一个snl语言的编译器。
我刚刚写完这个编译器的词法分析部分。
算法很简单,但在Win32下和Linux下有不同的表现:
我用std::getline(std::ifstream, std::string, 'n')读文件的一行,
分析完一行再读一行。
' ', 't', '10', '13', 这几个字符为空白字符不作分析。
分析到语言中不允许有字符就抛出异常(虽然没有必要在这里使用异常)。
这个方法在机房(Win98 & VC6)可以正确运行,
但在我的机器(FC5 & gcc v4.1.0)上每行结尾都会抛出异常,
异常的原因是:
有一个奇怪的字符c,
static_cast(c) == 13,但c != '13'
不知道是为什么(一个ASCII码为13的字符,怎么可能不是'13'呢)?
程序在下面:
有问题的地方在lexAnalysis.cc文件的第223行(在那那里我写了注释)。
测试文件可以用任何文本文件,关键是每行结尾的那个异常。
//main.cc
#ifndef _lexAnalysis_h_
#include "lexAnalysis.h"
#endif
#include
int main()
{
using namespace seven1::mickey;
using namespace seven1::lexical::mickey;
try
{
std::cout
我刚刚写完这个编译器的词法分析部分。
算法很简单,但在Win32下和Linux下有不同的表现:
我用std::getline(std::ifstream, std::string, 'n')读文件的一行,
分析完一行再读一行。
' ', 't', '10', '13', 这几个字符为空白字符不作分析。
分析到语言中不允许有字符就抛出异常(虽然没有必要在这里使用异常)。
这个方法在机房(Win98 & VC6)可以正确运行,
但在我的机器(FC5 & gcc v4.1.0)上每行结尾都会抛出异常,
异常的原因是:
有一个奇怪的字符c,
static_cast(c) == 13,但c != '13'
不知道是为什么(一个ASCII码为13的字符,怎么可能不是'13'呢)?
程序在下面:
有问题的地方在lexAnalysis.cc文件的第223行(在那那里我写了注释)。
测试文件可以用任何文本文件,关键是每行结尾的那个异常。
//main.cc
#ifndef _lexAnalysis_h_
#include "lexAnalysis.h"
#endif
#include
int main()
{
using namespace seven1::mickey;
using namespace seven1::lexical::mickey;
try
{
std::cout