Compiler Principle
1.Einleitung
1.1 Der Überblick über Compiler
1.1.1 Lexikalische Analyse
Die lexikalische Analyse zerteilt den eingelesenen Quelltext in lexikalische Einheiten (Tokens) verschiedener Typen, zum Beispiel Schlüsselwörter, Bezeichner, Zahlen, Zeichenketten oder Operatoren. Dieser Teil des Compilers heißt Scanner oder Lexer.
1.1.2 Syntaktische Analyse
Die syntaktische Analyse überprüft, ob der eingelesene Quellcode in einer korrekten Struktur der zu übersetzenden Quellsprache vorliegt, das heißt der kontextfreien Syntax (Grammatik) der Quellsprache entspricht
1.1.3 Semantische Analyse
Die semantische Analyse überprüft die statische Semantik, also über die syntaktische Analyse hinausgehende Bedingungen an das Programm.
Verschiedene Phase der Compiler:

Eine Übersetzung des Satzes:

1.1.4 Interpreter
Ein Interpreter ist ein Computerprogramm, das einen Programm-Quellcode im Gegensatz zu Assemblern oder Compilern nicht in eine auf dem System direkt ausführbare Datei übersetzt, sondern den Quellcode einliest, analysiert und ausführt.
1.1.5 Compiler
Ein Compiler ist ein Computerprogramm, das Quellcodes einer bestimmten Programmiersprache in eine Form übersetzt, die von einem Computer (direkter) ausgeführt werden kann.
2.Lexikalische Analyse
2.1 Kette und Sprache
Kette:Die Kette in Alphabet ist endliche Sequenz der Alphabetstabelle
Sprache:Eine Ketteliste der Alphabet

2.2 Regulärer Ausdruck
Regulärer Ausdruck:Ein regulärer Ausdruck ist in der theoretischen Informatik eine Zeichenkette, die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.
Regulärer Liste:ist eine Sprache,die mit regulärer Ausdruck ausdrucken kann.
Priorität der Rechnung:Closure>Verbindung>Auswahl

2.3 Die Definition der Regulärer Ausdruck
Man kann regulärer Ausdruck bennen und mit diese Name entsprechende regulärer Ausdruck zitieren.
Die Difinition der Regulärer Ausdruck:
Form wie
d1->r1
d2->r2
···
dn->rn
Zum Beispieil:
letter_->[A-Za-z_]
digit->0|1|···|9
id->letter_(letter_|digit)*
number->digit+(.digit+)?(E(+/-)?digit+)?
2.4 Nichtdeterministischer endlicher Automat
Ein nichtdeterministischer endlicher Automat (NEA; englisch nondeterministic finite automaton, NFA) ist ein endlicher Automat, bei dem es für den Zustandsübergang mehrere gleichwertige Möglichkeiten gibt. Im Unterschied zum deterministischen endlichen Automaten sind die Möglichkeiten nicht eindeutig, dem Automaten ist also nicht vorgegeben, welchen Übergang er zu wählen hat.

2.5 Deterministischer endlicher Automat
Ein deterministischer endlicher Automat (DEA; englisch deterministic finite automaton, DFA) ist ein endlicher Automat, der unter Eingabe eines Zeichens seines Eingabealphabetes (den möglichen Eingaben) von einem Zustand, in dem er sich befindet, in einen eindeutig bestimmten Folgezustand wechselt. Er unterscheidet sich darin von nichtdeterministischen endlichen Automaten, deren Zustandswechsel sich nicht immer deterministisch ereignen müssen.
2.5.1 Die Umsetzung von NFA nach DFA

Beispiel 1:Bildst du fur (a|b)*a(a|b) DFA
Zuerst zeichnen wir NFA

Bilden wir einen Dtran,gesamt vier verschiedene Liste

Abgrund des Dtrans zeichnen wir die Abbildung der DFA
Beispiel2:DFA,Die Binarzahl,die in {0,1} mit 5 Division ohne Rest machen kann,kann erkannt werden.

3.Syntaktische Analyse
3.1 Die Definition der Kontextfreie Grammatik
Normalerweise gesagt,G ist ein vierTuple(VT,VN,S,P),darunter:
(1)VT ist eine nicht leer und endliche Menge,deren Element wird als Terminalsymbol bezeichnet
(2)VN ist eine nicht leer und endliche Menge,deren Element wird als Nichtterminalsymbol bezeichnet
(3)S ist eine NichtTerminalsymbol,bezeichnen wir Startsymbol
(4)P ist eine Menge von Produktion
3.2 Folgendes Zeichen wird als Terminalsymbol/Nichtterminalsymbol benutzt

3.3 Die Zwei Bedeutung der Grammatik
Aufgrund der Grammatiks E->E+E|E*E|(E)|-E|id

3.4 Beseitigen Linke Rekursion
Es besteht A=>Aα,bezeichnen wir diese Grammatik Linke Rekursion
Linke Rekursion A->Aα|β kann mit nicht Linke Rekursion
A->βA'
A'->αA'|ε
ersetzen

3.5 LL(1) Grammatik
3.5.1 Die Definition der LL(1)

3.5.2 Berechnen First Menge
Methode:Berechnen wir Grammatik Symbolzeichenfolge,die Produktion der Terminalsymbol enthält,dann erhalten wir linken Seite der Produktion
Beispiel:FIRST(E) = FIRST(T) = FIRST(F) = {(,id} (Die Produktion müssen Terminalsymbol haben)
FIRST(E') = {+,ε} (Die Grammatik hier enthält Terminalsymbol,unnötig nach unten zu berechnen)
FIRST(T') = {*,ε} (gleich wie oben)

3.5.3 Berechnen Follow Menge
Methode:
berechnen wir der Rechte Seite des X,den Follow(X) Menge umfassen;
Vorhergehend Grammatik Symbolzeichenfolgen sitzen in dem Produktion der Follow;
Falls die Rechte Seite der X kein Terminalsymbol hat,fügen First Menge der Rechten Seite der X hinein;
Beispiel:FOLLOW(E) = FOLLOW(E') = {),$} (haben kein Verhältnis zu E',schauen wir der rechten Seite der Produktion der E,Ergebnis ist ')',legen es und '$' in Follow Menge)
FOLLOW(T) = FOLLOW(T') = {+,),$} (Weil First(E') ε und + umfasst,ε wird defalut beseitigt, legen '+' in Follow(E))
FOLLOW(F) = {+,*,),$} (Die rechte Seite der F hat kein Terminalsymbol F,fügen First(T') Follow(T) hinein)

Compiler Principle的更多相关文章
- APS审核经验+审核资料汇总——计算机科学与技术专业上海德语审核
1.APS是什么 德国驻华使馆文化处留德人员审核部(简称APS)成立于2001年7月,是由德国驻华使馆文化处和德意志学术交流中心(DAAD)在北京共同合作成立的服务机构. APS是中国学生前往德国留学 ...
- The IDL compiler
The IDL compiler or bindings generator transcompiles Web IDL to C++ code, specifically bindings betw ...
- Java compiler level does not match解决方法
从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description Resource Path Location Type Java compiler level d ...
- idea报错:error java compilation failed internal java compiler error
idea下面报如下问题 error java compilation failed internal java compiler error 解决办法:Setting->Compiler-> ...
- 使用Google Closure Compiler高级压缩Javascript代码注意的几个地方
介绍 GCC(Google Closure Compiler)是由谷歌发布的Js代码压缩编译工具.它可以做到分析Js的代码,移除不需要的代码(dead code),并且去重写它,最后再进行压缩. 三种 ...
- SSE指令集学习:Compiler Intrinsic
大多数的函数是在库中,Intrinsic Function却内嵌在编译器中(built in to the compiler). 1. Intrinsic Function Intrinsic Fun ...
- c++ builder 2010 错误 F1004 Internal compiler error at 0x9740d99 with base 0x9
今天遇到一个奇怪的问题,拷贝项目后,在修改,会出现F1004 Internal compiler error at 0x9740d99 with base 0x9 ,不管怎么改,删除改动,都没用,关闭 ...
- Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法
今天在导入工程进Eclipse的时候竟然出错了,控制台输出的是: [2013-02-04 22:17:13 - takepicture] Android requires compiler compl ...
- Compiler Error Message: CS0016: Could not write to output file 回绝访问
Compiler Error Message: CS0016: Could not write to output file 'c:\Windows...dll' 拒绝访问 C:\Windows\Te ...
随机推荐
- 疑难杂症--在Windows Server 2008 R2上运行SQL Server 2008情况下,CPU过多导致的问题
64位的Windows7和Windows Server 2008 R2为了能够在一台机器上,支持超过64个逻辑CPU, 引入了Processor Group这个概念.Processor Group会把 ...
- JObject使用
1.首先需要引用Json.NET\Newtonsoft.Json.dll程序集. 2.Page页 function saveUser() { var param = { id: , name: '张三 ...
- 自己从0开始学习Unity的笔记 VI (C#的for循环练习)
最近学到了for循环,我觉得其实看情况吧,和while挺像的,不过适合于累加或者累减这类的,for循环要更好用一点 for循环首先格式是 ; i < length; i++) { } 意思很简单 ...
- form 认证 读取
class Program { public static CookieContainer cc { get; set; } static void Main(string[] args) { str ...
- openvswitch dpdk
作者:张华 发表于:2016-04-07版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 硬件要 ...
- 北航操作系统实验2019:Lab4-1代码实现参考
北航操作系统实验2019:Lab4-1代码实现参考 部分实现参考自Github前辈们的项目,经过一定程度的勘误. 如果这份代码中存在任何问题或错误,请务必不吝在评论区指出. Exercise 4.1 ...
- Bootstrap框架常用总结
Bootstrap框架常用标签: 标题标签:<h1>-<h6> bootstrap中也设置的相同的样式 - 若要使用 必须使用空标签来定义 比如<s ...
- InnoDB: The innodb_system data file 'ibdata1' must be writable错误
重新安装percona5.7过程中,启动mysql服务总是报如下的错误 --10T02::.781070Z [ERROR] InnoDB: The innodb_system data file 'i ...
- Sublime关于tab转空格的设置技巧
在编写大的工程的代码的时候,会要求一些多余的字符不应该存在,比如说末尾不应该有空格或者Tab这样的字符,比如说所有的Tab应该变成空格,这样工程不管在什么样的编辑器下看,格式都会比较统一,等等,可是如 ...
- 2018 ACM-ICPC 亚洲区域赛青岛现场赛 —— Problem F. Tournament
题面:http://acm.zju.edu.cn/contest-materials/qd2018/qd2018_problems.pdf 题意: n个骑士决斗K轮 要求是每个骑士只能跟另外一个骑士决 ...