编译原理
文章平均质量分 89
XLYcmy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
词法分析LR
tokens 包括但不限于标识符、整数、运算符、字符串等。`gettok()` 函数会跳过空格,然后检查遇到的字符属于哪种类型的token,并基于switch语句返回相应的结构体(`tok_s`),包含了错误行(`err_line`)、错误列(`err_col`)以及 token 类型和其他相关信息。`main()` 函数是程序入口点,通过`init_io()` 初始化了源文件和目标文件指针,接着调用 `run()` 运行整个tokenizer,最后关闭文件并退出。原创 2024-12-27 08:15:00 · 596 阅读 · 0 评论 -
一个基于递归下降解析算法的C++程序
它定义了几个函数(如E(), G(), T(), S(), 和 F()),它们代表文法中的各个非终结符,通过调用其他函数逐步构建并处理输入字符串`s`。cout << "=====>\t\t 输入串分析正确!cout << "==>\t 输入串不符合该文法 " << endl;cout << "===请输入字符串 (以#号结束)===" << endl;cout << "=== 递归下降分析 ===" << endl;原创 2024-12-27 08:00:00 · 870 阅读 · 0 评论 -
读入文件词法分析
如果不是,继续检查是否有需要特殊处理的运算符(例如 `<=`, `>=`, `==`, `!if ((s[0] >= 'a' && s[0] <= 'z') || (s[0] >= 'A' && s[0] <= 'Z'))//是字母。//=====================测试函数是否正确=============================//比如遇到"a,b"这里下标0和1将a分开,1到2将逗号分开,2到3将b分开。//运算符有两位的,比如"<=",">=","==","!原创 2024-12-26 08:15:00 · 874 阅读 · 0 评论 -
一个简单的词法分析器
1. `scanner()`:这是词法分析的核心函数,它会遍历输入流(这里是`input`数组),识别连续的字母或数字构成的单词,并将其分类为预定义的关键字(`rwtab`数组里的条目)或其他类型的单词(如果不在关键字列表中,默认类型为10)。代码使用了一些辅助函数,如`m_getch()`获取下一个字符,`getbc()`移除空格,`concat()`将字符添加到当前单词,以及`letter()`、`digit()`和`reserve()`分别检查字符是否为字母、数字或关键字。m_getch();原创 2024-12-26 08:00:00 · 815 阅读 · 0 评论 -
LR(1)算法实现
源程序:【免费】LR(1)算法C++实现资源-优快云文库#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<stack>using namespace std;// a b # S Bchar LR0[50][50][100] = {原创 2024-12-25 08:15:00 · 668 阅读 · 0 评论 -
一种简化版的自动机语法检查器
这段代码是一个简单的分析程序,它基于给定的状态转移规则(存储在`analy_map`和`p`两个映射表中)对输入字符串进行处理。这个程序采用了两个栈:一个状态栈(state_st)用于跟踪解析过程中的状态,另一个符号栈(symbol_st)用于存放操作符。cout << "当前输入串: " << input_str.substr(i) << " ";- 否则,根据当前操作符(如果是'r'开头)从`p`表中获取新的状态,调整状态栈和符号栈,并回溯处理;cout << "请输入输入串:" << endl;原创 2024-12-24 08:00:00 · 880 阅读 · 0 评论 -
LL(1)算法实现
源程序:int status;}stack_e;char left;int length;}grammar;{ 0, 0, 0}exit(erno);else {\n");else {\n");return ele;int i;原创 2024-12-23 08:00:00 · 572 阅读 · 0 评论 -
SLR(1)实现
puts("------------------------------------------LR(0)分析表--------------------------------------------------------");puts("****************FIRST集***************************");puts("***************FOLLOW集*******************");原创 2024-12-22 08:15:00 · 807 阅读 · 0 评论 -
LR(1)(Left-to-Right, Rightmost derivation with 1 symbol lookahead)实现
/用-代替->,你也可以试着改下,不过。strcmp(array[state1].action1, "acc"))//acc-分析结束。strcmp(array[state1].action2, "acc"))//acc-分析结束。原创 2024-12-22 08:00:00 · 1365 阅读 · 0 评论 -
一个简单的词法分析器
这段代码是一个简单的词法分析器(Lexer)的实现,用于将源代码转换成一系列的标记(tokens)。这些标记是编译器或解释器进一步处理的基本单元。原创 2024-12-21 08:15:00 · 1117 阅读 · 0 评论 -
词法分析器
" << endl;cout << "/=***************************词法分析结果***************************=/" << endl;//将获取的字符存入token中。//将小数点入token中。原创 2024-12-21 08:00:00 · 956 阅读 · 0 评论
分享