tools/perf/util/expr.l

Source file repositories/reference/linux-study-clean/tools/perf/util/expr.l

File Facts

System
Linux kernel
Corpus path
tools/perf/util/expr.l
Extension
.l
Size
2862 bytes
Lines
150
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: tools
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

if (*str == '\\') {
			*dst++ = *++str;
			if (!*str)
				break;
		}
		else if (*str == '?') {
			char *paramval;
			int i = 0;
			int size = asprintf(&paramval, "%d", runtime);

			if (size < 0)
				*dst++ = '0';
			else {
				while (i < size)
					*dst++ = paramval[i++];
				free(paramval);
			}
		}
		else
			*dst++ = *str;
		str++;
	}

	*dst = 0x0;
	return ret;
}

static int str(yyscan_t scanner, int token, int runtime)
{
	YYSTYPE *yylval = expr_get_lval(scanner);
	char *text = expr_get_text(scanner);

	yylval->str = normalize(strdup(text), runtime);
	if (!yylval->str)
		return EXPR_ERROR;

	yylval->str = normalize(yylval->str, runtime);
	return token;
}

static int literal(yyscan_t scanner, const struct expr_scanner_ctx *sctx)
{
	YYSTYPE *yylval = expr_get_lval(scanner);

	yylval->num = expr__get_literal(expr_get_text(scanner), sctx);
	if (isnan(yylval->num)) {
		if (!sctx->is_test)
			return EXPR_ERROR;
		yylval->num = 1;
	}
	return LITERAL;
}

static int nan_value(yyscan_t scanner)
{
	YYSTYPE *yylval = expr_get_lval(scanner);

	yylval->num = NAN;
	return NUMBER;
}
%}

number		([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)(e-?[0-9]+)?

sch		[-,=]
spec		\\{sch}
sym		[0-9a-zA-Z_\.:@?]+
symbol		({spec}|{sym})+
literal		#[0-9a-zA-Z_\.\-]+

Annotation

Implementation Notes