同济大学编译原理课程作业,目前只实现到中间代码生成阶段(在semantic分支),今后会继续更新...
采用LR(1)分析方法,采用C++实现后端编译,采用Qt实现前端界面
项目成员:
1.将项目clone到本地,配置好VS+Qt的联合开发环境后(配置方法可以参考这里),可以在Visual Studio 2022下可以直接运行
2.由于在生成语法分析树图片的过程中使用到Graphviz,故如需生成语法分析树图片,需要提前安装Graphviz。 Graphviz安装说明:
- 至http://www.graphviz.org/Download_windows.php网站选择系统对应的安装包下载。
- 打开安装程序进行安装,并配置环境变量(可在安装程序中勾选'Add Graphviz to the system PATH for all users'自动配置环境变量)。
- 在任意位置打开终端,输入
dot --version
,如果显示Graphviz相关版本信息,则安装成功。
1.开始界面
![image](https://private-user-images.githubusercontent.com/105330548/283780386-9d9c6839-3547-49d0-941e-c786453cd4a3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY0OTMsIm5iZiI6MTczOTYxNjE5MywicGF0aCI6Ii8xMDUzMzA1NDgvMjgzNzgwMzg2LTlkOWM2ODM5LTM1NDctNDlkMC05NDFlLWM3ODY0NTNjZDRhMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mOTM5YTVlY2M5YzZkMDI5ZTU2YmFlMGMyZWFlMmE4N2U5ZTVlZDhlZGNlMDBiNDdmNTY0NGUyZGQ5NTQyYzYwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.-tNN_HCiYj2vzwrMYrnbQU1Oxgflk7mfA9Ca8AKuBX0)
2.点击文件,导入源代码并且导入文法,此外源代码可以自己在文本框输入
![image1](https://private-user-images.githubusercontent.com/105330548/283780469-0de10f06-0b77-40ae-9230-4a309341b94e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY0OTMsIm5iZiI6MTczOTYxNjE5MywicGF0aCI6Ii8xMDUzMzA1NDgvMjgzNzgwNDY5LTBkZTEwZjA2LTBiNzctNDBhZS05MjMwLTRhMzA5MzQxYjk0ZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01MTkzYjI4ZDZiN2QyZjJhY2Y1NThkNGU4ZTJmNGM3OGFmYmU3MTc1MDAxMmY4MWRhNDgwZmVlMmRjMDc1ZGM5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.uIuzw2bgcuKIKjocQwJ6Y_Lu9e66_m-LIwOeNjADZ8U)
![image2](https://private-user-images.githubusercontent.com/105330548/283780512-04f46684-000b-47e6-b1a6-729d4f1a6e93.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY0OTMsIm5iZiI6MTczOTYxNjE5MywicGF0aCI6Ii8xMDUzMzA1NDgvMjgzNzgwNTEyLTA0ZjQ2Njg0LTAwMGItNDdlNi1iMWE2LTcyOWQ0ZjFhNmU5My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03OWNjMjJjNjYzZTIyNDI3MTQ5NjQwNGVjZTAxMzU3ZjRjOGYwOGUyYjQ5YzNmZWZlMWYyYjY3NmZlN2QwMjdjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.kXn1TWkHYPBif_ASLgav9546afbUTXT-MGDzpIMZFLo)
3.点击编译->开始编译,可以选择是否继续生成语法DFA
![image](https://private-user-images.githubusercontent.com/105330548/283780538-ee43e576-b511-4dbb-8e7c-40c6f02cfe14.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY0OTMsIm5iZiI6MTczOTYxNjE5MywicGF0aCI6Ii8xMDUzMzA1NDgvMjgzNzgwNTM4LWVlNDNlNTc2LWI1MTEtNGRiYi04ZTdjLTQwYzZmMDJjZmUxNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xYzYzMmY2MzY4YWZkNTg3NjdkYjY0NGFmZjdlNjE0MDJmZmM0NjZjMjI2NWYxODEyNjlkMTRjM2EwMzc0ZWU3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.rFNKJ1m6K4tEAVJccq3o2rfDYWkI8oO-J2NRdljsVZU)
4.可以进行错误定位
![image1](https://private-user-images.githubusercontent.com/105330548/283780582-e2096712-747c-4a9a-b78c-be057c32e500.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY0OTMsIm5iZiI6MTczOTYxNjE5MywicGF0aCI6Ii8xMDUzMzA1NDgvMjgzNzgwNTgyLWUyMDk2NzEyLTc0N2MtNGE5YS1iNzhjLWJlMDU3YzMyZTUwMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04OTdiNjllM2Q2NWYyMDFjZTljMzZkOGRhMDBkY2FjODhhNWYxY2NlMTY1ZjE3ZDhmMjNjZjdjOGIwYTA3NzM0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.bl_SWWSzHSoGSgKhX0guHinBnxbi7PCDhw-IFbzUc08)
![image2](https://private-user-images.githubusercontent.com/105330548/283780614-332e35a4-bdca-44ea-8bd8-258c7f3e8156.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY0OTMsIm5iZiI6MTczOTYxNjE5MywicGF0aCI6Ii8xMDUzMzA1NDgvMjgzNzgwNjE0LTMzMmUzNWE0LWJkY2EtNDRlYS04YmQ4LTI1OGM3ZjNlODE1Ni5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNzg2MTI2ZjNmNWE3MDBjYTM4ZThhYjkwZjJlZDc4YjY2YWJjYzY2Njk5Y2NkZGYzN2ExMTRmOWI5Mzg3N2M5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ucuflCLr5YzDcGW1ak4ZjZ6_jJVdREHr2yxC4hFi8CA)
5.可以在“词法->Token”查看分割后的token以及“词法->DFA”查看分割token的DFA图
6.可以在“语法” 查看ACTION GOTO Table,规约过程,语法树和LR(1)的DFA