⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example2.y

📁 学习lemon语法分析的windows程序
💻 Y
字号:
/* Copyright (GPL) 2004 mchirico@users.sourceforge.net or mchirico@comcast.net  Simple lemon parser  example.    Download:  http://prdownloads.sourceforge.net/souptonuts/lemon_examples.tar.gz?download  To compile this example see the Makefile. Or  this is what is taking place.      $ ./lemon example2.y                              $ cat main_part2 >> example2.c    $ g++ -o ex2  -O2 -s -pipe example2.c  Next, run ./ex2    $ ./ex2  Which will give the following output:    Result.value=17  <---------------------------\           Result.n=4        				 |    Result.value=-9   				 |    Result.n=4        				 |    Result.value=78   				 |    Result.n=10       				 |						 |  Now looking at a section of main_part2	 |  we can see how 4 PLUS 13 in implemented.	 |						 |      struct Token t0,t1;              		 |      struct Token mToken;         		 |                                   		 |      t0.value=4;                  		 |      t0.n=0;                      		 |                                   		 |      t1.value=13;                               |      t1.n=0;                                    |         // Below 4 PLUS 14    ----------------- /                               Parse (pParser, NUM, t0);          Parse (pParser, PLUS, t0);         Parse (pParser, NUM, t1);          Parse (pParser, 0, t0);      */%include {   #include <iostream>  #include "ex2def.h"#include "example2.h"}  %token_type {Token}%default_type {Token}%type expr {Token}%type NUM {Token}   %left PLUS MINUS.   %left DIVIDE TIMES.        %syntax_error {    std::cout << "Syntax error!" << std::endl;  }      program ::= expr(A).   {                         std::cout << "Result.value=" << A.value << std::endl;                         std::cout << "Result.n=" << A.n << std::endl;                          }  expr(A) ::= expr(B) MINUS  expr(C).   { A.value = B.value - C.value;                                        A.n = B.n+1  + C.n+1;                                      }  expr(A) ::= expr(B) PLUS  expr(C).   { A.value = B.value + C.value;                                        A.n = B.n+1  + C.n+1;                                      }  expr(A) ::= expr(B) TIMES  expr(C).   { A.value = B.value * C.value;                                        A.n = B.n+1  + C.n+1;                                         }  expr(A) ::= expr(B) DIVIDE expr(C).  {          if(C.value != 0){           A.value = B.value / C.value;           A.n = B.n+1 + C.n+1;          }else{           std::cout << "divide by zero" << std::endl;           }}  /* end of DIVIDE */expr(A) ::= NUM(B). { A.value = B.value; A.n = B.n+1; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -