gpt4 book ai didi

java - 从 C 转换为 Java

转载 作者:行者123 更新时间:2023-11-30 20:49:46 26 4
gpt4 key购买 nike

我正在使用下面所示的代码,我正在尝试将其从 C 代码转换为 java 代码。该程序应该是一个词法分析器。我发现大多数 C 代码与 java 代码非常相似,但我发现某些部分并非如此。在有问题的部分中,我放入转换器,发现它没有像 java 那样“使用”。

/* front.c - a lexical analyzer system for simple arithmetic expressions */
#include <stdio.h>
#include <ctype.h>

/* Global declarations */
/* Variables */
int charClass;
char lexeme [100];
char nextChar;
int lexLen;
int token;
int nextToken;
FILE *in_fp, *fopen();

/* Function declarations */
void addChar();
void getChar();
void getNonBlank();
int lex();

/* Character classes *
#define LETTER 0
#define DIGIT 1
#define UNKNOWN 99

/* Token codes */
#define INT_LIT 10
#define IDENT 11
#define ASSIGN_OP 20
#define ADD_OP 21
#define SUB_OP 22
#define MULT_OP 23
#define DIV_OP 24
#define LEFT_PAREN 25
#define RIGHT_PAREN 26




/******************************************************/
/* main driver */
main()
{
/* Open the input data file and process its contents */
if ((in_fp = fopen("front.in", "r")) == NULL)
printf("ERROR - cannot open front.in \n");
else {
getChar();
do {
lex();
} while (nextToken != EOF);
}
}
/*****************************************************/
/* lookup - a function to lookup operators and parentheses and return the token */
int lookup(char ch) {
switch (ch) {
case '(':
addChar();
nextToken = LEFT_PAREN;
break;

case ')':
addChar();
nextToken = RIGHT_PAREN;
break;

case '+':
addChar();
nextToken = ADD_OP;
break;

case '-':
addChar();
nextToken = SUB_OP;
break;

case '*':
addChar();
nextToken = MULT_OP;
break;

case '/':
addChar();
nextToken = DIV_OP;
break;

default:
addChar();
nextToken = EOF;
break;
}
return nextToken;
}




/*****************************************************/
/* addChar - a function to add nextChar to lexeme */
void addChar() {
if (lexLen <= 98) {
lexeme[lexLen++] = nextChar;
lexeme[lexLen] = 0;
}
else
printf("Error - lexeme is too long \n");
}
/*****************************************************/
/* getChar - a function to get the next character of input and determine its character class */
void getChar()
{
if ((nextChar = getc(in_fp)) != EOF)
{
if (isalpha(nextChar))
charClass = LETTER;
else if (isdigit(nextChar))
charClass = DIGIT;
else charClass = UNKNOWN;
}
else
charClass = EOF;
}
/*****************************************************/
/* getNonBlank - a function to call getChar until it returns a non-whitespace character */
void getNonBlank()
{
while (isspace(nextChar))
getChar();
}




*****************************************************/
/* lex - a simple lexical analyzer for arithmetic expressions */
int lex()
{
lexLen = 0;
getNonBlank();
switch (charClass)
{

/* Parse identifiers */
case LETTER:
addChar();
getChar();
while (charClass == LETTER || charClass == DIGIT)
{
addChar();
getChar();
}
nextToken = IDENT;
break;
/* Parse integer literals */
case DIGIT:
addChar();
getChar();
while (charClass == DIGIT)
{
addChar();
getChar();
}
nextToken = INT_LIT;
break;
/* Parentheses and operators */
case UNKNOWN:
lookup(nextChar);
getChar();
break;
/* EOF */
case EOF:
nextToken = EOF;
lexeme[0] = 'E';
lexeme[1] = 'O';
lexeme[2] = 'F';
lexeme[3] = 0;
break;
} /* End of switch */
printf("Next token is: %d, Next lexeme is %s\n",
nextToken, lexeme);
return nextToken;
} /* End of function lex */

我的问题是在提供的代码的顶部,它使用#define LETTER 0#define INT_LIT 10我将如何在java中实现它。我觉得我可能需要使用某种形式的库或者实现它们的方法。

最佳答案

您可以将这些 #define 替换为 Java 整型常量:

// before:
#define LETTER 0
// after:
public static final int LETTER = 0;

关于java - 从 C 转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com