b.y
来自「Lemon是一个C或者C++语言的LALR(1)语法分析器生成器。它和“biso」· Y 代码 · 共 45 行
Y
45 行
%token_type {int}
%left PLUS MINUS.
%left DIVIDE TIMES.
%include {
#include <stdio.h>
#include <iostream>
#include "b.h"
}
%syntax_error {
std::cout << "Syntax error!" << std::endl;
}
program ::= expr(A). { std::cout << "Result=" << A << std::endl; }
expr(A) ::= expr(B) MINUS expr(C). { A = B - C; }
expr(A) ::= expr(B) PLUS expr(C). { A = B + C; }
expr(A) ::= expr(B) TIMES expr(C). { A = B * C; }
expr(A) ::= expr(B) DIVIDE expr(C). {
if(C != 0){
A = B / C;
}else{
std::cout << "divide by zero" << std::endl;
}
} /* end of DIVIDE */
expr(A) ::= INTEGER(B). { A = B; }
%code {
int main()
{
yyTraceFILE = stdout;//fopen("Trace.txt","wb");
void* pParser = ParseAlloc (malloc);
Parse (pParser, INTEGER, 1);
Parse (pParser, PLUS, 0);
Parse (pParser, INTEGER, 2);
Parse (pParser, TIMES, 0);
Parse (pParser, INTEGER, 3);
Parse (pParser, 0, 0);
ParseFree(pParser, free );
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?