词法分析

词法分析

代码实现

#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

posted @ 2024-11-10 15:54  取不出名  阅读(18)  评论(0)    收藏  举报