❶ 编译原理如何判断id+id*id没有语法错误
构造LL(1)语法分析程序,任意输入一个文法符号串,并判断它是否为文法的一个句子.程序要求为该文法构造预测分析表,并按照预测分析算法对输入串进行语法分析,判别程序是否符合已知的语法规则,如果不符合(编译出错),则输出错误信息.
以你说的SQL语句为例,词法分析是将语句中的单词流识别出来,比如create table Student 词法分析是分析出 这句的单词流是 “create” “table” “identifier”(前提是你给它们编号 比如用宏或者枚举),然后语法分析 是通过单词流 判断 非逻辑错误 比如 有不能识别的符号 create table后面不是标示符等等 语义分析是分析语句的逻辑关系 比如字段长度越界什么的如 vchar(2) 你赋值为“啊啊啊啊啊啊”这种错误的识别是语义分析阶段完成的 希望能帮到你
❷ 编译原理判断题
1. B 正确
2. A 错误,不一定存在
3. B 正确
4. B 正确
5. A 错误,是后缀式
6. A 错误,只是算符文法,不一定是算符优先文法
7. B 正确
8. B 正确
9. A 错误,语义动作是附加在产生式上的,不是附加在非终结符上
10. A 错误,有些文法不能改写为LL(1)文法
11. B 正确
12. B 正确
13. B 正确
14. B 正确
15. A 错误,SLR(1),LR(1)等都是冲突解决的办法
16. B 正确
17. B 正确
18. A 错误,不是编译程序工作效率高,而是生成的目标程序运行效率高
19. B 正确
❸ vc判断是32位编译还是64位编译判断是debug编译还是release编译
1.判断是debug编译还是release编译。
如果_DEBUG定义了表示是debug编译,否则是release编译。
2.判断是32位编译还是64位编译。
在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。在 x64 配置下,两者都有定义。即在 VC 下,_WIN32 一定有定义。
因此,WIN32/_WIN32 可以用来判断是否 Windows 系统(对于跨平台程序),而 _WIN64 用来判断编译环境是 x86 还是 x64。附一个表:
常量\定义 预定义选项 Windows.h VC编译器
WIN32 Win32 √(minwindef.h) ×
_WIN32 × × √
_WIN64 × × x64
最后附上根据相应编译情况,进行有条件的链接相应静态库的示例代码,其实就是一些宏定义语句的使用:
[cpp] view plain在CODE上查看代码片派生到我的代码片
#include "json/json.h"
#ifdef _DEBUG
#ifndef _WIN64
#pragma comment(lib,"json/json_mtd.lib")
#else
#pragma comment(lib,"json/json_mtd_x64.lib")
#endif
#else
#ifndef _WIN64
#pragma comment(lib,"json/json_mt.lib")
#else
#pragma comment(lib,"json/json_mt_x64.lib")
#endif
#endif
using namespace Json;
❹ 如何判断一个程序是C编译的还是C++编译的
一般情况来说,C语言代码是可以用C++编译器编译的,但是C编译器,就一般不能编译C++代码。
自己区分的话:
1、包含头文件格式:
#include
和有using namespace的,都应该属于C++的内容。
而#include也应该是C++,因为它属于C++的库,由于C++代码可以应用C语言的函数库,所以比较难区分。
比如#include的,不一定就是C语言代码
❺ 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
以下是在论坛中看到的两种解释: (1)如果是要你的代码在编译时发现编译器类型,就判断_cplusplus或_STDC_宏,通常许多编译器还有其他编译标志宏, #ifdef __cplusplus cout<<"c++";#else cout<<"c";#endif如果要判断已经编译的代码的编译类型,就用nm查一下输出函数符号是否和函数名相同。(相同为c,不同为c++。详解见下面)(2)简单是说,由于c语言是没有重载函数的概念的,所以c编译器编译的程序里,所有函数只有函数名对应的入口。而由于c++语言有重载函数 的概念,如果只有函数名对应的入口,则会出现混淆,所以c++编译器编译的程序,应该是函数名+参数类型列表对应到入口。 注意,因为mian函数是整个程序的入口,所以mian是不能有重载的,所以,如果一个程序只有main函数,是无法确认是c还是c++编译器编译的可以通过nm来查看函数名入口如一个函数int foo(int i, float j) c编译的程序通过nm查看 foo 0x567xxxxxx (地址) c++编译程序,通过nm查看 foo(int, float) 0x567xxxxxx 另外,如果要在c++编译器里使用通过c编译的目标文件,必须通知c++编译器,我使用的函数是c风格的,不需要列出参数列表的,这样c++编译才能正确的连接
❻ 用C语言编译:输入一个数,编译判断它是否为对称数(用for循环语句来做)
#include <stdio.h>
int main(void)
{
int i = 0, j;
int num, num1;
int buf[128];
int flag = 1;
printf("input a integer:");
scanf("%d", &num);
num1 = num;
while (num)
{
buf[i++] = num % 10;
num /= 10;
}
for (j = 0; j < i / 2; j++)
{
if (buf[j] != buf[i - 1 -j])
{
flag = 0;
break;
}
}
if (flag) printf("%d 是对称数\n", num1);
else printf("%d 不是对称数\n", num1);
return 0;
}
❼ 关于如何判断gcc之类的编译器的编译结果
我们再使用gcc编译的时候可以让他的输出信息保存到文件当中
gccmain.c-omain&>status.txt
上面的命令就是将gcc编译的信息保存到status.txt文件中,然后我们再程序中读取文件,看文件是否有内容,没有内容就说明没有报错和警告,编译成功。有内容就对每一行内容进行判断,看是warring还是error,只有warring也代表编译成功,有error代表编译失败,然后把这些报错信息都打印出来就好了。
下面看一下例子:
❽ 编译原理实现判断是不是一个文法的句子
构造LL(1)语法分析程序,任意输入一个文法符号串,并判断它是否为文法的一个句子。程序要求为该文法构造预测分析表,并按照预测分析算法对输入串进行语法分析,判别程序是否符合已知的语法规则,如果不符合(编译出错),则输出错误信息。
❾ 如何判断一段程序是由c 编译程序还是由c++编译 程序编译的
ANSIC标准中有一个__cplusplus标识符,当你编译C++程序时,这个标识符就会被定义;当你编译C程序时,这个标识符不会被定义。这样,你就可以检查程序是不是用C++编译程序编译的,请看下例: #ifdef __cplusplus /* Is __cplusplus deftned? */ #define USING_C FALSE /* Yes,we are not usingC*/ #elSe #define USING_C TRUE /* NO,we are usingC*/ #endif 当对上例进行编译预处理时,预处理程序首先检查标识符__cplusplus是否已被定义——如果C被定义,它就将USING_C赋值为FALSE;反之,它就将USING_C赋值为TRUE。此后,你就可以在程序中检查USING_C的值,并由此判断程序是不是用C++编译程序编译的。
❿ 编译程序判断一个数是否为素数
下面输入一个整数判断其是否为素数的程序,希望楼主理解其算法,
#include <iostream.h>
#include <math.h>
bool is_prime(int n)
{ int i,j;
for (i=2, j=int(sqrt(n)); i<=j; i++)
if (n%i == 0) return false;
return true;
}
void main()
{ int n;
cout << "请输入一个正整数:";
cin >> n; //从键盘输入一个正整数
if (n < 2)
{cout<<"您输入的数小于2。"; return ; }
if(n==2) cout<<2<<"是素数"<<endl; //输出最小素数
else if(is_prime(n))
cout<<n<<"是素数"<<endl;
}