首页 > 其他分享 >词法分析

词法分析

时间:2024-11-10 15:46:28浏览次数:1  
标签:分析 cout int cin 词法 ss while ans

词法分析

代码实现

#include<bits/stdc++.h>
#define int long long
#define PII pair<int , int>
using namespace std;
const int N = 1e6 + 10;
int n , k = 1 , x1 = 0 , x0 = 0;
int mid = 1e9 + 7;
map<string , int>mp;

void matt(){   
    string s;
    while(getline(cin , s)){
        stringstream t(s);
        string ss;
        while (t >> ss)
        {
            n = ss.size();
            int i = 0;
            string ssr = "";
            // cout << ss << '\n';
            while (i < n)
            {
                if(i != n - 1 && ss[i] == '*' && ss[i + 1] == '/') {
                    x0 = 0 ;
                    i += 2;
                    continue;
                }
                if(x0) {i ++ ; continue ;}
                if(isalpha(ss[i]) || ss[i] == '_' || isdigit(ss[i])){
                    ssr += ss[i];
                }
                else{
                    if(i != n - 1 && ss[i] == '.' && isdigit(ss[i - 1]) && isdigit(ss[i + 1])) {
                        ssr += '.';
                        i++;
                        continue;
                    }
                    if(ssr != ""){
                        if(!mp[ssr]){
                            mp[ssr] = k++;
                        }
                        cout << ssr << '\n';
                        ssr = "";
                    }
                    if(i != n - 1 && ss[i] == '/' && ss[i + 1] == '/') {
                        x1 = 1 ;
                        break;
                    }
                    else if(i != n - 1 && ss[i] == '/' && ss[i + 1] == '*') {
                        x0 = 1 ;
                        i++;
                        continue;
                    }
                    else if(i != n - 1 && ss[i] == '+' && ss[i + 1] == '+'){
                        cout << "++\n";
                        if(!mp["++"]){
                            mp["++"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '-' && ss[i + 1] == '-'){
                        cout << "--\n";
                        if(!mp["--"]){
                            mp["--"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '=' && ss[i + 1] == '='){
                        cout << "==\n";
                        if(!mp["=="]){
                            mp["=="] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '!' && ss[i + 1] == '='){
                        cout << "!=\n";
                        if(!mp["!="]){
                            mp["!="] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '+' && ss[i + 1] == '='){
                        cout << "+=\n";
                        if(!mp["+="]){
                            mp["+="] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '-' && ss[i + 1] == '='){
                        cout << "-=\n";
                        if(!mp["-="]){
                            mp["-="] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '*' && ss[i + 1] == '='){
                        cout << "*=\n";
                        if(!mp["*="]){
                            mp["*="] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '/' && ss[i + 1] == '='){
                        cout << "/=\n";
                        if(!mp["/="]){
                            mp["/="] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '&' && ss[i + 1] == '&'){
                        cout << "&&\n";
                        if(!mp["&&"]){
                            mp["&&"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '|' && ss[i + 1] == '|'){
                        cout << "||\n";
                        if(!mp["||"]){
                            mp["||"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '<' && ss[i + 1] == '<'){
                        cout << "<<\n";
                        if(!mp["<<"]){
                            mp["<<"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '>' && ss[i + 1] == '>'){
                        cout << ">>\n";
                        if(!mp[">>"]){
                            mp[">>"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '\\' && ss[i + 1] == 'n'){
                        cout << "\\n" << '\n';
                        if(!mp["\\n"]){
                            mp["\\n"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '%' && ss[i + 1] == 'd'){
                        cout << "%d\n";
                        if(!mp["%d"]){
                            mp["%d"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '%' && ss[i + 1] == 'f'){
                        cout << "%f\n";
                        if(!mp["%f"]){
                            mp["%f"] = k++;
                        }
                        i++;
                    }
                    else if(i != n - 1 && ss[i] == '%' && ss[i + 1] == 'c'){
                        cout << "%c\n";
                        if(!mp["%c"]){
                            mp["%c"] = k++;
                        }
                        i++;
                    }
                    else {
                        cout << ss[i] << '\n';
                        ssr += ss[i];
                        if(!mp[ssr]){
                            mp[ssr] = k++;
                        }
                        ssr = "";
                    }
                }
                i++;
            }
            if(ssr != "") {
                cout << ssr << '\n';
                if(!mp[ssr]) mp[ssr] = k++;
            }
            if(x1) {
                x1 = 0; 
                break;
            }
        }
        
    }
    cout << '\n' << '\n';
    for(auto x : mp){
        cout << x.first << ' ' << x.second << '\n';
    }
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    // cin >> T;
    while (T--)
    {
        matt();
    }
    return 0;
}

输入内容

int main(){
    // ios::sync_with_stdio(false);
    // cin.tie(0);
    // cout.tie(0);
    int T = 1;
    cin >> T;
    while (T--)
    {
        int n , m;
        cin >> n;
        scanf("%d" , &m);
        int ans = 0;
        double x = 1.2;
        while (n)
        {
            if(n <= 2) n = 0 , ans++;
            else if( n % 2 == 0) n /= 2 , ans++;
            else n-- , ans++;
        }
        cout << ans << '\n';
    }
    return 0;
}

输出内容

int
main
(
)
{
int
T
=
1
;
cin
>>
T
;
while
(
T
--
)
{
int
n
,
m
;
cin
>>
n
;
scanf
(
"
%d
"
,
&
m
)
;
int
ans
=
0
;
double
x
=
1.2
;
while
(
n
)
{
if
(
n
<
=
2
)
n
=
0
,
ans
++
;
else
if
(
n
%
2
==
0
)
n
/=
2
,
ans
++
;
else
n
--
,
ans
++
;
}
cout
<<
ans
<<
'
\n
'
;
}
return
0
;
}


" 18
% 31
%d 19
& 20
' 37
( 3
) 4
++ 29
, 15
-- 13
/= 33
0 22
1 8
1.2 25
2 28
; 9
< 27
<< 36
= 7
== 32
>> 11
T 6
\n 38
ans 21
cin 10
cout 35
double 23
else 30
if 26
int 1
m 16
main 2
n 14
return 39
scanf 17
while 12
x 24
{ 5
} 34

标签:分析,cout,int,cin,词法,ss,while,ans
From: https://www.cnblogs.com/zhljy/p/18538089

相关文章

  • 业务开发顺序分析
    页面及功能开发首先对商家页面进行开发登入后判断是否为商家,显示商家页面。商品上下架功能(1)对商品信息的填写发布更具商品的分类刷选商品显示所有已上架的商品及其信息对已上架的商品可供修改(价格,下架等)显示订单页面(5)显示已下单页面对用户页面开发登录后判断是......
  • 地应力分析平台简介
    一、平台介绍地应力分析平台是由专业团队开发的云平台软件,专为地应力数据的计算、统计、绘图、管理和综合分析而设计。该平台包含多个分析模块,并以插件形式集成了多个适用于地应力数据分析的工具集,极大地提高了地应力数据的处理效率和分析准确性(一站式地应力数据管理与分析)。......
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行电源阻抗仿真分析操作
    SigritySPEED2000PowerGroundNoiseSimulation模式如何进行电源阻抗仿真分析操作指导(二)-有电容SigritySPEED2000PowerGroundNoiseSimulation模式如何进行电源阻抗仿真分析操作指导(一)-无电容详细介绍了如何在该模式查看电源的自阻抗,它是没有电容参与的模式,接下来......
  • 【可白嫖源码】基于springboot的订餐系统(案例分析)
    摘 要    随着互联网和移动技术的快速发展,订餐服务在现代社会中变得越来越普遍和重要。订餐系统作为餐饮行业数字化转型的重要组成部分,不仅提升了用户的订餐体验,也为餐厅提供了更多的经营机会和管理便利。在这一背景下,本研究基于Java编程语言和MySQL数据库,结合前端......
  • 动态规划-古生物DNA序列血缘分析
    问题描述DNA是由A、C、G、T四种核苷酸组成,例如AAAGTCTGAC,假定自然环境下DNA发生异变的情况有:基因缺失一个核苷酸基因新增一个核苷酸基因替换一个核苷酸且发生概率相同。古生物学家Sam得到了若干条相似DNA序列,Sam认为一个DNA序列向另外一个DNA序列转变所需的......
  • 【项目实战】机器学习分类预测(RF/SVM/Logistic)与可解释性分析(SHAP/LIME)
    机器学习分类预测与SHAP可解释性分析研究目的今天,我将尝试预测一个人是否会中风。首先,我将进行广泛的数据可视化。这将帮助我了解是否有任何特征看起来预示着中风,或者实际上预示着不会中风。接下来,我将建立多个模型,并选出表现最好的一个。我将使用f1分数作为主要指标,因为......
  • 【碧蓝航线】基于伤害公式的舰炮理论分析与排名
    前言不要被数据迷惑双眼,影响胜利的还有许多东西。——Warspite 本排名基于属性数据,仅供大体参考,战场细节我无法左右。若考虑过多细节则无法保证量化计算,非量化计算之时,若凭感觉给出定性结论则失去测评意义。本UP初来WIKI,无心带节奏,还望诸位大佬无需带有多余情绪,能够以平常心......
  • GEE 案例——澳大利亚野火的探索性分析与谷歌地球引擎中的野火建模的机器学习方法
    简介澳大利亚野火-一种机器学习方法监测森林火灾澳大利亚野火的探索性分析与谷歌地球引擎中的野火建模的机器学习方法免费的遥感数据允许分析这一灾难,因此本研究调查了基于地球观测的澳大利亚野火数据,以揭示一般见解。在过去几年中,机器学习(ML)在许多领域证明了其成功,因为它......
  • 综合能源系统分析的统一能路理论(三):《稳态与动态潮流计算》(Python代码实现)
     ......
  • Google Earth Engine Python——PyGEE-SWToolbox地表水分析工具箱
    目录简介功能安装使用方法代码引用BibTeXifrequired:致谢简介一个用于使用GoogleEarthEngine进行交互式地表水映射和分析的PythonJupyter笔记本工具箱        PyGEE-SWToolbox是一个Python-GoogleEarthEngine(GEE)地表水分析工具箱,开发于Jupyter......