• 贡献

  • 关注

  • 访问

个人简介:

 
共 13 篇文章
显示摘要每页显示  条
那就是要靠 Scanner 來分析了,Scanner 會逐個逐個字元讀進來並且在“適當時候”把字元合成一組詞語供後邊的 Parser 做其他處理工作。上回提到,我們要寫一個 Recursive descent parser,從 Scanner 一直讀 Token 進來,並建立一棵 Parse tree。上回提要:我們開始著手編寫編譯部份,從那棵 Parse tree 生成代碼,做法跟之前的 Analyser 差不多...
【深入淺出教你寫編譯器(Compiler)】六、編譯器(Compiler)﹣生成代碼(Code Generation)(下)【深入淺出教你寫編譯器(Compiler)】六、編譯器(Compiler)﹣生成代碼(Code Generation)(下)}var insObj = {};}if (insObj.opcode == "vlabel"){this.vlabelMap[insObj.operands[0]] = i;Wemachine.prototype.beq = function ...
【深入淺出教你寫編譯器(Compiler)】七、優化器(Optimizer)﹣還可以更好【深入淺出教你寫編譯器(Compiler)】七、優化器(Optimizer)﹣還可以更好。Analyser.prototype.evaluateVariableNode = function (node){if (this.vars[node.varName]){//this variable has been declared before//since we can find it in our variable tableErro...
switch (token){ case Token.tokens.PLUS_TOKEN: case Token.tokens.MULT_TOKEN: case Token.tokens.}Parser.prototype.createOperatorNode = function (operatorToken){ switch (operatorToken){ case Token.tokens.MINUSMINUS_TOKEN){ //post decrement this.nextToken();}else if (this.looka...
lookahead() == Token.Parse “var” 的方法其實就是用 lookahead 同 nextToken 來讀取 Token,然後再檢查一下這個 Token 是不是我們想要的 Token,如果不是的話就 call 一下 skipError 來跳過接下來的 Token,到最後就檢查一下 “=” 有沒有出現,出現了的話就再 parse 接下來的 initialisation expression。方法很簡單,其實就是一直跳過接下...
VAR_TOKEN = Token.tokens.BOOLLITERAL_TOKEN = Token.tokens.ELSE_TOKEN = Token.tokens.IDENTIFIER_TOKEN = Token.tokens.除了改變了狀態之外,我們還要記下剛讀進來的字元到 bufferStr 中,因為後面我們可能需要用它來分辨那個 Token 真正的意思,例如 true false,我們只會有一個 Token 叫做 BOOLLITERAL_TOKEN,所以我們需要用 “true” ...
writeln("lwi " + register + ", " + node.這段程式有一個 for loop,loop 裏面做的跟 Analyser 差不多,就是讀一個 node 進來,是運算元的話就 evaluate 一下,並把結果放到另一個 register 中,然後再讀一個運算符 node,把兩邊的數值進行一下運算,再返回結果,這就完成了 compound node 的基本流程了。evaluateIdentif...
opcode1 operand1, operand2, operand3;opcode2 operand1, operand2;resolveRegister = function (operand){ if (typeof operand == "string" && operand.getRegisterContent = function (operand){ operand = this.setRegisterContent = function (operand, value){ operand = this.operands);setRegisterContent(...
evaluateExpressionBlockNode = function (node){ for (var i = 0, l = node.evaluateExpressionNode = function (node){ if (node instanceof VariableNode){ this.type == "bool"){ node.evaluateBoolNode = function (node){ node.evaluateIntNode = function (node){ node.valueType = (node.SEMA...
var operands = instruction.split(",");} if (insObj.opcode == "vlabel"){ this.vlabelMap[insObj.operands[0]] = i;Wemachine.prototype.easyJump = function (lbl){ var nextPC;if (lbl.substr(0, 1) == "_"){ //it is vlabel var realLbl = lbl.substr(1);Wemachine.pr...
帮助 | 留言交流 | 联系我们 | 服务条款 | 下载网文摘手 | 下载手机客户端
北京六智信息技术股份有限公司 Copyright© 2005-2019 360doc.com , All Rights Reserved
京ICP证090625号 京ICP备05038915号 京网文[2016]6433-853号 京公网安备11010502030377号
返回
顶部