A. 編譯原理布爾表達式和LR(1)求助
回填技術是指控制語句中布爾表達式翻譯成四元式序列時,有的轉移地址不能在產生這些四元
B. c語言中的布爾類型、枚舉類型是個什麼概念
布爾型(Boolean)是一種數據的類型,這種類型只有兩種值,即"真"與"假"。 布爾常量 在Pascal語言中"真"用ture表示,"假"用False表示。所以布爾類型只有TRUE與FALSE兩個常量。C語言或C++的一種構造類型,它用於聲明一組命名的常數。 (1)枚舉的聲明:枚舉聲明用於聲明新的枚舉類型。 訪問修辭符 enum 枚舉名:基礎類型 { 枚舉成員 } ; 基礎類型必須能夠表示該枚舉中定義的所有枚舉數值。枚舉聲明可以顯式地聲明 byte、sbyte、short、ushort、int、uint、long 或 ulong 類型作為對應的基礎類型。沒有顯式地聲明基礎類型的枚舉聲明意味著所對應的基礎類型是 int。 (2)枚舉成員 枚舉成員是該枚舉類型的命名常數。任意兩個枚舉成員不能具有相同的名稱。每個枚舉成員均具有相關聯的常數值。此值的類型就是枚舉的基礎類型。每個枚舉成員的常數值必須在該枚舉的基礎類型的范圍之內。 示例: public enum TimeofDay:uint { Morning=-3, Afternoon=-2, Evening=-1 } ; 產生編譯時錯誤,原因是常數值 -1、-2 和 –3 不在基礎整型 uint 的范圍內。
C. 誰能幫我具體講解一下java中boolean的含義和用法。也可以給我反貪推薦一些資料。謝謝
Boolean 數據類型 Boolean 變數存儲為 16 位(2 個位元組)的數值形式,但只能是 True 或是 False。Boolean 變數的值顯示為 True 或 False(在使用 Print 的時候),或者 #TRUE# 或 #FALSE#(在使用 Write # 的時候)。使用關鍵字 True 與 False 可將 Boolean 變數賦值為這兩個狀態中的一個。此數據應用於邏輯判斷。當其他類型數據轉換為邏輯型數據時,0 會轉成 False,而其他的值則變成 True。當邏輯型數據轉換為整型數據時,False 成為 0,而 True 成為 -1。 在java中boolean值只能是true和false,而不能用0和1代替,並且一定要小寫。 boolean operate是指布爾運算。在ansys軟體中他的下拉菜單會提示進行的布爾運算項目。 使用方法 1.直接賦值boolean b1=false; 2.由條件表達式賦值boolean b2=3>4; 3.有另一個boolean變數賦值boolean b3=b1; 4.由方法返回賦值boolean b4=list.ready();//假設ready方法返回一個boolean的話
D. 編譯原理文法分析
改完了,能文法分析出來了!!
大概 跟你說下 你的錯誤吧:
出錯地點:
1.聲明的stack[50]沒有初始化;
2.stack的入棧是錯誤的,按照你的方式,如果原來有TM,再加入T->FN,則M就被擠出來了.(這里很關鍵,你對照我給你改的再看看)
3.s指針在你入棧操作以後並沒有指向棧頂,而是保持了不變,這肯定是有問題的.(傳入push函數的時候直接傳參數s就好了.)
4.if(*s==*p){***}else{}的else的右括弧管轄的范圍 有錯誤
不嫌棄的話,可以去http://blog.csdn.net/fangguanya,我的BLOG,不怎麼充實,呵呵,有這個程序的運行結果的. 謝謝 呵呵.
總之你對照我給你改的再看看吧. 我把我的測試輸出 也給保留了.你好對照點.
(PS.我用的vs2005,用的時候你改下頭申明,其他一樣)
// grammar.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
char * spush(char *stack,char *pt);
bool analyse(char *p);
void main()
{
//將分析串存放在二維數組中
char input[5][10]={"i+i#",
"i*(i+i)#",
"i*i+i#",
"i+*#",
"+i*i#"};
bool flag; //定義一個布爾型的標記量
for(int h=0;h<5;++h)
{
flag=analyse(input[h]);
if(flag) cout<<"恭喜你!"<<input[h]<<"語法分析成功,合法!"<<endl;
else cout<<"對不起!"<<input[h]<<"語法分析失敗,非法!"<<endl;
}
int aaa;
cin>>aaa;
}
//定義各一將串逆序入棧的函數
char * spush(char *stack,char *pt)
{
int l=0;
//while循環的作用是將指針指向字元串的末尾,然後再由後向前入棧,從而實現逆序
while(*pt!='\0')
{
pt++;
l++;
}
if (*stack == '#')
{
stack++;
}
while(l)
{
pt--;
char cTempIntoStack = (*pt);
*stack=cTempIntoStack;
stack++;
l--;
}
stack--; //由於前面向前加了一位,要返回
////////////////
return stack;
///////////////////////////////////
}
/*LL(1)分析表
i + * ( ) #
E TM +TM
F i (E)
M TM e e
N e *FN e e
T FN FN
*/
//分析函數
bool analyse(char *p){
char analyseTable[5][6][4]={
"TM", "", "", "TM", "", "",
"i", "", "", "(E)", "", "",
"", "+TM", "", "", "e", "e",
"", "e", "*FN", "", "e", "e",
"FN", "", "", "TN", "", ""
};
char *stack = new char[50]; //定義一個棧空間
for (int iStack = 0;iStack<50 ;iStack++)
{
stack[iStack] = 0;
}
char *s=stack; //用指針*s指向棧的起始地址
*s='#'; //將「#」入棧
s++; //指針加1
*s='E'; //將「E」入棧
//下面的while循環實現字元串的詞法分析操作
int count = 0;
while(*s!='#' || *p!='#'){
count++;
char * temp = s;
cout<<"NO."<<count<<endl;
cout<<"STACK"<<endl;
while (*temp != '#')
{
cout<<*temp<<" ";
temp--;
}
cout<<endl;
int x,y;
//若果棧頂數據和分析串的字元匹配,則將符號棧的棧頂數據出棧(即將棧頂指針減1)
if(*s==*p){
cout<<"Before :"<<*s<<endl;
s--;
p++;
cout<<"After :"<<*s<<endl;
}
//當符號棧和分析串的字元不匹配時,查分析表
else {
switch(*s){
case 'E':x=0;break;
case 'F':x=1;break;
case 'M':x=2;break;
case 'N':x=3;break;
case 'T':x=4;break;
default:return false;
}
switch(*p){
case 'i':y=0;break;
case '+':y=1;break;
case '*':y=2;break;
case '(':y=3;break;
case ')':y=4;break;
case '#':y=5;break;
default:return false;
}
//若果對應的為空,則分析串非法,退出
if(analyseTable[x][y][0]=='\0') return false;
//若查表所對應的為'e',則將符號棧的棧頂數據出棧
else if(analyseTable[x][y][0]=='e') s--;
//其它,這時將查表所得的項逆序入符號棧
else {
s=spush(s,analyseTable[x][y]);
}
}
}
return true; //分析成功,返回
}
E. 急急急,編譯原理
using namespace std;
struct BiNode
{
char data;
BiNode *lchild, *rchild;
};
typedef BiNode *BiTree;
int CreateBiTree(BiTree &T, const char *s1, const char *s2, int len)
{
if (len<=0)
{
T = NULL;
return 1;
}
else
{
T = new BiNode;
T->data = *s1;
int i;
for ( i=0; i<len; i++) if (s2[i]==*s1) break;
CreateBiTree(T->lchild, s1+1, s2, i);
CreateBiTree(T->rchild, s1+i+1, s2+i+1, len-(i+1));
}
return 1;
}
int DestroyBiTree(BiTree &T)
{
if (T==NULL) return 1;
DestroyBiTree(T->lchild);
DestroyBiTree(T->rchild);
delete T;
T = NULL;
return 1;
}
int ATraverse(BiTree &T)
{
if (T==NULL) return 1;
ATraverse(T->lchild);
ATraverse(T->rchild);
cout<<T->data;
return 1;
}
main()
{
char a[2000],b[2000];
while(cin>>a>>b)
{
BiTree T;
int count=0;
int n;
for(n=0;a[n]!='\0';n++);
CreateBiTree(T,a,b,n);
ATraverse(T);
cout<<" ";
cout<<endl;
DestroyBiTree(T);
F. bool在c語言中是什麼意思
在C語言中,沒有bool這種類型,但是在C++中,把bool當做一種基本的數據類型。
在C語言中,當我們要表示真或假的時候,都是定義一個非bool類型來使用的。
在C++中,加入了布爾bool這種基礎的類型,用true和false來表示真或者假,也可以用非0值來表示真,用0來表示假。在C++中,雖然布爾類型只表示true和false,看起來好像可以用一個位來存儲布爾類型的變數,但其實,布爾類型在C++中是佔用一個位元組的。
相關信息:
在C語言中,一般認為0為假,非0為真。這是因為c99之前,c90是沒有bool類型的的。但是c99引入了_Bool類型(_Bool就是一個類型,不過在新增頭文件stdbool.h中,被重新用宏寫成了 bool,為了保證C/C++兼容性)。目前為止大部分C語言書籍採用的標准還是c90標准,因此我們很少用bool類型。
C語言中的邏輯表達式的返回結果,比如 a==b的返回結果,只有0和1兩種可能,但是它們的大小確是4,也就是用整形表示真假。
G. dalse 布爾值字面量是什麼意思
javascript零基礎
H. 舉例說明c#中的布爾值的用法
舉例說明c#中的布爾值的用法:
1、布爾值一般用於if、while中
2、布爾值有兩個值:true(真)、flase(假)
3、舉例:
int a=0;
if(true){
a=1;
}else{
a=2;
}
最後a的結果就是1
I. c語言bool什麼意思
布爾型(bool)變數的值只有 真 (true) 和假 (false)。
布爾型變數可用於邏輯表達式,也就是「或」「與」「非」之類的邏輯運算和大於小於之類的關系運算,邏輯表達式運算結果為真或為假。
bool可用於定義函數類型為布爾型,函數里可以有 return TRUE; return FALSE 之類的語句。
布爾型運算結果常用於條件語句:if (邏輯表達式){如果是 true 執行這里;}else{如果是 false 執行這里;};
(9)編譯原理布爾值的翻譯擴展閱讀
使用bool邏輯型變數的優點:
1、提高程序的可讀性
bool類型的變數只可能有兩個值true或false,在沒有統一的布爾類型在大型的工程項中特別是用到第三方程序庫時,可能使用不同的手段模擬布爾類型以提交代碼的可讀性,這樣會使得代碼有些混亂,C語言中引入了bool內置類型,解決了代碼的一致性問題。
2、提高程序的性能
bool在絕大多數編譯器編譯時都將其實現為1位元組,即sizeof(bool)的值為1,加上其只有兩個值的值域{true, false},是C語言中最小的數據類型了。
雖然char、unsigned char和signed char類型在C語言中沒有特定的實現要求,但一般也實現為一個位元組,這樣看來與bool類型從內存空間的佔用上並沒有性能上的差異。