1. 程式人生 > >編譯原理-翻譯布林表示式

編譯原理-翻譯布林表示式

0x01 題目描述

Input
 多組輸入,每組輸入為一行字串,例如: a < b or c < d and e < f
每個符號都用空格間隔
Output
 假鏈跳到0,真鏈跳到1,表示式序號從100開始排。
Example Input

1
a < b or c < d and e < f

Example Output

100(j<,a,b,1)
101(j,_,_,102)
102(j<,c,d,104)
103(j,_,_,0)
104(j<,e,f,100)
105(j,_,_,103)

0x02 程式碼

#include<bits/stdc++.h>
using namespace std; string str; int jump,tmp; vector<string>tt; int main() { int n; scanf("%d\n",&n); while(n--) { getline(cin,str); str += " end"; jump = 1;tmp = 0; string s; stringstream ss(str); int id = 100; while
(ss >> s) { if(s == "or") { printf("%d(j%s,%s,%s,%d)\n",id,tt[1].c_str(),tt[0].c_str(),tt[2].c_str(),jump); jump = id++; printf("%d(j,_,_,%d)\n",id,id+1); id ++; tt.clear(); } else
if(s == "and") { printf("%d(j%s,%s,%s,%d)\n",id,tt[1].c_str(),tt[0].c_str(),tt[2].c_str(),id+2); id ++; printf("%d(j,_,_,%d)\n",id,tmp); tmp = id++; tt.clear(); } else if(s == "end") { printf("%d(j%s,%s,%s,%d)\n",id,tt[1].c_str(),tt[0].c_str(),tt[2].c_str(),jump); id ++; printf("%d(j,_,_,%d)\n",id,tmp); tt.clear(); } else tt.push_back(s); } } return 0; }

相關推薦

編譯原理-翻譯布林表示式

0x01 題目描述 Input 多組輸入,每組輸入為一行字串,例如: a < b or c < d and e < f 每個符號都用空格間隔 Output 假鏈跳到0,真鏈跳

3515 翻譯布林表示式

#include<bits/stdc++.h> using namespace std; string s; int t,f; vector<string>ans; int main() { int n; scanf(

小白說編譯原理-7-算術表示式編譯樹(支撐類)

簡介 本章講述的是編譯樹的實現,它包含樹節點,樹的構建,樹的遍歷三個部分。利用編譯樹,我們可以構建基本的運算節點以及數字節點,然後遍歷樹的過程就是執行算術運算的過程。 例如如下的一棵樹 葉子節點和分支節點都是一個個的Node,它具有不同的型別(運算子和

編譯原理——表示式計算

寫在前面 最近需要實現自定義報表的功能,其中有一個需求是要計算使用者輸入的公式。比如使用者輸入公式:A1 + A2 * 2.4,我們需要將A1和A2替換成對應的值,然後算出結果;公式中還可能包含括號,比如:A1 * (A2 - 3);再進一步,公式中還可以有我們內建的的幾個函式(SUM, MIN, MAX,

編譯原理-語法制導的翻譯

繼詞法分析和文法分析之後,本文將介紹使用上下文無關文法來引導對語言的翻譯。 SDD 語法制導定義(Syntax-Directed Definition,SDD)是一個上下文無關文法和屬性及語義規則的結合。屬性和文法符號相關聯,語義規則和產生式相關聯,文法符號X的屬性a表示為X.a。 非終結符

編譯原理:將a+d*(b-c) 寫成逆波蘭表示式

逆波蘭表示式示例 1. a+b 改為 ab+ 2. (a+b)*(c+d) 改為 ab+cd+* 3. a+d*(b-c) 改為 adbc-*+ 逆波蘭表示式又叫做字尾表示式,顧

正則表示式引擎的構建——基於編譯原理DFA(龍書第三章)——2 構造抽象語法樹

簡要介紹     構造抽象語法樹是構造基於DFA的正則表示式引擎的第一步。目前在我實現的這個正則表示式的雛形中,正則表示式的運算子有3種,表示選擇的|運算子,表示星號運算的*運算子,表示連線的運算子cat(在實際正則表示式中被省去)。 例如對於正則表示式a*b|c,在a*

編譯原理學習筆記(二)翻譯程式的實現

上一節所學的主要是語法到語義的內容,通過手動構造語法樹來理解編譯過程。 在3.5節,書中給出了字尾表示式翻譯程式的java實現。根據前面的內容,今天對NC程式碼編譯給出簡易的實現。 在實現前,需要幾個準備內容用以簡化程式碼: 1. 正則表示式 正則表示式

編譯原理實驗(四)之解析語言翻譯成三地址程式碼

選擇部分C語言的語法成分,設計其詞法語法語義分析程式。 設計並實現一個一遍掃描的詞法語法語義分析程式,將部分C語言的語法成分翻譯成三地址程式碼,要求有一定的出錯提示和錯誤恢復功能。 例如簡單賦值語句: area=3.14*a*a; s= 2*3.1416*r*(h+r); 翻譯成

編譯原理】語法制導翻譯之屬性文法(一)

最近對程式語言如何從 原始碼->位元組碼(or 機器碼)->執行 產生了興趣,為此從今天開始,給自己制定了一個學習計劃, 目的是能夠對Java原始碼如何到class檔案位元組碼,再如何在JVM上執行有比較深入的理解。 學習的第一步,就從難啃的編譯原理開始。 之前

編譯原理中的逆波蘭表示式(資料流圖中運算變數的流程)

表示式一般由運算元(Operand)、運算子(Operator)組成,例如算術表示式中,通常把運算子放在兩個運算元的中間, 這稱為中綴表示式(Infix Expression),如A+B。 波蘭數學家Jan Lukasiewicz提出了另一種數學表示法,它有兩種表示形

編譯原理習題(含答案)——8-10語法制導翻譯——哈工大陳鄞配套版本

 語法制導翻譯_11 文法G[S]及其語法制導翻譯定義如下:產生式 語義動作S’ → S print( S.num)S → ( L) S.num = L.num +1S → a S.num = 0L →L( 1), S L.num = L( 1).num + S.numL →

編譯原理 第六章 屬性文法和語法制導翻譯

一、知識總結        首先學習了屬性文法,屬性文法是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的“值”,稱為“屬性”。屬性分為綜合屬性和繼承屬性。綜合屬性用於“自下而上”傳遞資訊,在語法樹中,一個結點的綜合屬性的值,由其子結點的屬性值確定。

表示式翻譯器-1-編譯原理

#include <stdio.h> #include <stdlib.h> #define NUM_TKN 500 #define ID_TKN 600 #define NONE NULL char LookAhead; int LookAhead1; char l

編譯原理SLR(1)文法的C++實現(基於SLR(1)分析法的語法制導翻譯及中間程式碼生成程式設計原理與實現)

程式功能描述完成以下描述賦值語句 SLR(1)文法語法制導生成中間程式碼四元式的過程。G[A]:A→V=EE→E+T∣E-T∣TT→T*F∣T/F∣FF→(E)∣iV→i[設計說明] 終結符號i為使用者定義的簡單變數,即識別符號的定義。[設計要求](1)構造文法的SLR(1)

編譯原理第六章-屬性文法和語法制導翻譯

      第六章主要講了屬性文法、語義規則、基於屬性文法的處理、S屬性的自下而上計算、L-屬性文法的自頂向下翻譯等內容。一些基本的概念:屬性文法:是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的“值”(稱為屬性)。屬性:代表與文法符號相關的資訊,

編譯原理-第二章 一個簡單的語法指導編譯器-2.4 語法制導翻譯

語法制導翻譯: 定義:語法制導翻譯是通過向一個文法的產生式附加一些規則或程式片段而得到的 功能:給定詞法單元流,通過向一個文法產生式附加一些語義動 作,語法制導分析產生語法分析樹,並實現翻譯動作 相關概念: 屬性:表示與某個程式構造相關的任意的量,因為用文法符號(終結符號或非終結符號)來表示程式構造,所以

詞法分析器——哈工大編譯原理課程(一)

mina == 原理 技術分享 after 文件 編碼 exe warn 詞法分析器——哈工大編譯原理課程(一) 程序輸入:從code.txt文件中讀取內容 程序輸出:識別出的單詞序列,格式為:(種別碼,屬性值)      ①對於關鍵字

編譯原理-如何使用flex和yacc工具構造一個高級計算器

轉換 bin 們的 構造 roc ann 邏輯 計算 文件指針 Flex工具的使用方法 Lex 是一種生成掃描器的工具。 Lex是Unix環境下非常著名的工具,主要功能是生成一個掃描器(Scanner)的C源碼。 掃描器是一種識別文本中的詞匯模式的程序。 這些詞匯模式(或者

編譯原理:引論

教材 低級語言 程序 quest mce 語言翻譯 後端 高級 del 閱讀的教材為:編譯原理(張素琴等編著,清華大學出版社) 編譯過程就是將高級語言翻譯為低級語言 編譯過程分為前段(front end)和後端(back end) 閱讀過程中遇到的疑問是:解釋程序和編譯程序