12 changed files with 1524 additions and 3045 deletions
-
1sapi/phpdbg/.gitignore
-
15sapi/phpdbg/Makefile.frag
-
2sapi/phpdbg/config.m4
-
7sapi/phpdbg/phpdbg.h
-
3125sapi/phpdbg/phpdbg_lexer.c
-
385sapi/phpdbg/phpdbg_lexer.h
-
270sapi/phpdbg/phpdbg_lexer.l
-
550sapi/phpdbg/phpdbg_parser.c
-
24sapi/phpdbg/phpdbg_parser.h
-
152sapi/phpdbg/phpdbg_parser.y
-
37sapi/phpdbg/phpdbg_prompt.c
-
1sapi/phpdbg/travis/ci.sh
3125
sapi/phpdbg/phpdbg_lexer.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,348 +1,41 @@ |
|||
#ifndef yyHEADER_H |
|||
#define yyHEADER_H 1 |
|||
#define yyIN_HEADER 1 |
|||
/* |
|||
+----------------------------------------------------------------------+ |
|||
| PHP Version 5 | |
|||
+----------------------------------------------------------------------+ |
|||
| Copyright (c) 1997-2014 The PHP Group | |
|||
+----------------------------------------------------------------------+ |
|||
| This source file is subject to version 3.01 of the PHP license, | |
|||
| that is bundled with this package in the file LICENSE, and is | |
|||
| available through the world-wide-web at the following url: | |
|||
| http://www.php.net/license/3_01.txt | |
|||
| If you did not receive a copy of the PHP license and are unable to | |
|||
| obtain it through the world-wide-web, please send a note to | |
|||
| license@php.net so we can mail you a copy immediately. | |
|||
+----------------------------------------------------------------------+ |
|||
| Authors: Felipe Pena <felipe@php.net> | |
|||
| Authors: Joe Watkins <joe.watkins@live.co.uk> | |
|||
| Authors: Bob Weinand <bwoebi@php.net> | |
|||
+----------------------------------------------------------------------+ |
|||
*/ |
|||
|
|||
#ifndef PHPDBG_LEXER_H |
|||
#define PHPDBG_LEXER_H |
|||
|
|||
#include "phpdbg_cmd.h" |
|||
|
|||
typedef struct { |
|||
unsigned int len; |
|||
unsigned char *text; |
|||
unsigned char *cursor; |
|||
unsigned char *marker; |
|||
int state; |
|||
} phpdbg_lexer_data; |
|||
|
|||
#define yyparse phpdbg_parse |
|||
#define yylex phpdbg_lex |
|||
|
|||
void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC); |
|||
|
|||
int phpdbg_lex (phpdbg_param_t* yylval); |
|||
|
|||
#line 6 "sapi/phpdbg/phpdbg_lexer.h" |
|||
|
|||
#line 8 "sapi/phpdbg/phpdbg_lexer.h" |
|||
|
|||
#define YY_INT_ALIGNED short int |
|||
|
|||
/* A lexical scanner generated by flex */ |
|||
|
|||
#define FLEX_SCANNER |
|||
#define YY_FLEX_MAJOR_VERSION 2 |
|||
#define YY_FLEX_MINOR_VERSION 5 |
|||
#define YY_FLEX_SUBMINOR_VERSION 37 |
|||
#if YY_FLEX_SUBMINOR_VERSION > 0 |
|||
#define FLEX_BETA |
|||
#endif |
|||
|
|||
/* First, we deal with platform-specific or compiler-specific issues. */ |
|||
|
|||
/* begin standard C headers. */ |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <errno.h> |
|||
#include <stdlib.h> |
|||
|
|||
/* end standard C headers. */ |
|||
|
|||
/* flex integer type definitions */ |
|||
|
|||
#ifndef FLEXINT_H |
|||
#define FLEXINT_H |
|||
|
|||
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ |
|||
|
|||
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L |
|||
|
|||
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, |
|||
* if you want the limit (max/min) macros for int types. |
|||
*/ |
|||
#ifndef __STDC_LIMIT_MACROS |
|||
#define __STDC_LIMIT_MACROS 1 |
|||
#endif |
|||
|
|||
#include <inttypes.h> |
|||
typedef int8_t flex_int8_t; |
|||
typedef uint8_t flex_uint8_t; |
|||
typedef int16_t flex_int16_t; |
|||
typedef uint16_t flex_uint16_t; |
|||
typedef int32_t flex_int32_t; |
|||
typedef uint32_t flex_uint32_t; |
|||
#else |
|||
typedef signed char flex_int8_t; |
|||
typedef short int flex_int16_t; |
|||
typedef int flex_int32_t; |
|||
typedef unsigned char flex_uint8_t; |
|||
typedef unsigned short int flex_uint16_t; |
|||
typedef unsigned int flex_uint32_t; |
|||
|
|||
/* Limits of integral types. */ |
|||
#ifndef INT8_MIN |
|||
#define INT8_MIN (-128) |
|||
#endif |
|||
#ifndef INT16_MIN |
|||
#define INT16_MIN (-32767-1) |
|||
#endif |
|||
#ifndef INT32_MIN |
|||
#define INT32_MIN (-2147483647-1) |
|||
#endif |
|||
#ifndef INT8_MAX |
|||
#define INT8_MAX (127) |
|||
#endif |
|||
#ifndef INT16_MAX |
|||
#define INT16_MAX (32767) |
|||
#endif |
|||
#ifndef INT32_MAX |
|||
#define INT32_MAX (2147483647) |
|||
#endif |
|||
#ifndef UINT8_MAX |
|||
#define UINT8_MAX (255U) |
|||
#endif |
|||
#ifndef UINT16_MAX |
|||
#define UINT16_MAX (65535U) |
|||
#endif |
|||
#ifndef UINT32_MAX |
|||
#define UINT32_MAX (4294967295U) |
|||
#endif |
|||
|
|||
#endif /* ! C99 */ |
|||
|
|||
#endif /* ! FLEXINT_H */ |
|||
|
|||
#ifdef __cplusplus |
|||
|
|||
/* The "const" storage-class-modifier is valid. */ |
|||
#define YY_USE_CONST |
|||
|
|||
#else /* ! __cplusplus */ |
|||
|
|||
/* C99 requires __STDC__ to be defined as 1. */ |
|||
#if defined (__STDC__) |
|||
|
|||
#define YY_USE_CONST |
|||
|
|||
#endif /* defined (__STDC__) */ |
|||
#endif /* ! __cplusplus */ |
|||
|
|||
#ifdef YY_USE_CONST |
|||
#define yyconst const |
|||
#else |
|||
#define yyconst |
|||
#endif |
|||
|
|||
/* An opaque pointer. */ |
|||
#ifndef YY_TYPEDEF_YY_SCANNER_T |
|||
#define YY_TYPEDEF_YY_SCANNER_T |
|||
typedef void* yyscan_t; |
|||
#endif |
|||
|
|||
/* For convenience, these vars (plus the bison vars far below) |
|||
are macros in the reentrant scanner. */ |
|||
#define yyin yyg->yyin_r |
|||
#define yyout yyg->yyout_r |
|||
#define yyextra yyg->yyextra_r |
|||
#define yyleng yyg->yyleng_r |
|||
#define yytext yyg->yytext_r |
|||
#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) |
|||
#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) |
|||
#define yy_flex_debug yyg->yy_flex_debug_r |
|||
|
|||
/* Size of default input buffer. */ |
|||
#ifndef YY_BUF_SIZE |
|||
#define YY_BUF_SIZE 16384 |
|||
#endif |
|||
|
|||
#ifndef YY_TYPEDEF_YY_BUFFER_STATE |
|||
#define YY_TYPEDEF_YY_BUFFER_STATE |
|||
typedef struct yy_buffer_state *YY_BUFFER_STATE; |
|||
#endif |
|||
|
|||
#ifndef YY_TYPEDEF_YY_SIZE_T |
|||
#define YY_TYPEDEF_YY_SIZE_T |
|||
typedef size_t yy_size_t; |
|||
#endif |
|||
|
|||
#ifndef YY_STRUCT_YY_BUFFER_STATE |
|||
#define YY_STRUCT_YY_BUFFER_STATE |
|||
struct yy_buffer_state |
|||
{ |
|||
FILE *yy_input_file; |
|||
|
|||
char *yy_ch_buf; /* input buffer */ |
|||
char *yy_buf_pos; /* current position in input buffer */ |
|||
|
|||
/* Size of input buffer in bytes, not including room for EOB |
|||
* characters. |
|||
*/ |
|||
yy_size_t yy_buf_size; |
|||
|
|||
/* Number of characters read into yy_ch_buf, not including EOB |
|||
* characters. |
|||
*/ |
|||
yy_size_t yy_n_chars; |
|||
|
|||
/* Whether we "own" the buffer - i.e., we know we created it, |
|||
* and can realloc() it to grow it, and should free() it to |
|||
* delete it. |
|||
*/ |
|||
int yy_is_our_buffer; |
|||
|
|||
/* Whether this is an "interactive" input source; if so, and |
|||
* if we're using stdio for input, then we want to use getc() |
|||
* instead of fread(), to make sure we stop fetching input after |
|||
* each newline. |
|||
*/ |
|||
int yy_is_interactive; |
|||
|
|||
/* Whether we're considered to be at the beginning of a line. |
|||
* If so, '^' rules will be active on the next match, otherwise |
|||
* not. |
|||
*/ |
|||
int yy_at_bol; |
|||
|
|||
int yy_bs_lineno; /**< The line count. */ |
|||
int yy_bs_column; /**< The column count. */ |
|||
|
|||
/* Whether to try to fill the input buffer when we reach the |
|||
* end of it. |
|||
*/ |
|||
int yy_fill_buffer; |
|||
|
|||
int yy_buffer_status; |
|||
|
|||
}; |
|||
#endif /* !YY_STRUCT_YY_BUFFER_STATE */ |
|||
|
|||
void yyrestart (FILE *input_file ,yyscan_t yyscanner ); |
|||
void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); |
|||
YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); |
|||
void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); |
|||
void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); |
|||
void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); |
|||
void yypop_buffer_state (yyscan_t yyscanner ); |
|||
|
|||
YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); |
|||
YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); |
|||
YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); |
|||
|
|||
void *yyalloc (yy_size_t ,yyscan_t yyscanner ); |
|||
void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); |
|||
void yyfree (void * ,yyscan_t yyscanner ); |
|||
|
|||
/* Begin user sect3 */ |
|||
|
|||
#define yywrap(yyscanner) 1 |
|||
#define YY_SKIP_YYWRAP |
|||
|
|||
#define yytext_ptr yytext_r |
|||
|
|||
#ifdef YY_HEADER_EXPORT_START_CONDITIONS |
|||
#define INITIAL 0 |
|||
#define RAW 1 |
|||
#define NORMAL 2 |
|||
|
|||
#endif |
|||
|
|||
#ifndef YY_NO_UNISTD_H |
|||
/* Special case for "unistd.h", since it is non-ANSI. We include it way |
|||
* down here because we want the user's section 1 to have been scanned first. |
|||
* The user has a chance to override it with an option. |
|||
*/ |
|||
#include <unistd.h> |
|||
#endif |
|||
|
|||
#ifndef YY_EXTRA_TYPE |
|||
#define YY_EXTRA_TYPE void * |
|||
#endif |
|||
|
|||
int yylex_init (yyscan_t* scanner); |
|||
|
|||
int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); |
|||
|
|||
/* Accessor methods to globals. |
|||
These are made visible to non-reentrant scanners for convenience. */ |
|||
|
|||
int yylex_destroy (yyscan_t yyscanner ); |
|||
|
|||
int yyget_debug (yyscan_t yyscanner ); |
|||
|
|||
void yyset_debug (int debug_flag ,yyscan_t yyscanner ); |
|||
|
|||
YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); |
|||
|
|||
void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); |
|||
|
|||
FILE *yyget_in (yyscan_t yyscanner ); |
|||
|
|||
void yyset_in (FILE * in_str ,yyscan_t yyscanner ); |
|||
|
|||
FILE *yyget_out (yyscan_t yyscanner ); |
|||
|
|||
void yyset_out (FILE * out_str ,yyscan_t yyscanner ); |
|||
|
|||
yy_size_t yyget_leng (yyscan_t yyscanner ); |
|||
|
|||
char *yyget_text (yyscan_t yyscanner ); |
|||
|
|||
int yyget_lineno (yyscan_t yyscanner ); |
|||
|
|||
void yyset_lineno (int line_number ,yyscan_t yyscanner ); |
|||
|
|||
int yyget_column (yyscan_t yyscanner ); |
|||
|
|||
void yyset_column (int column_no ,yyscan_t yyscanner ); |
|||
|
|||
YYSTYPE * yyget_lval (yyscan_t yyscanner ); |
|||
|
|||
void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); |
|||
|
|||
/* Macros after this point can all be overridden by user definitions in |
|||
* section 1. |
|||
*/ |
|||
|
|||
#ifndef YY_SKIP_YYWRAP |
|||
#ifdef __cplusplus |
|||
extern "C" int yywrap (yyscan_t yyscanner ); |
|||
#else |
|||
extern int yywrap (yyscan_t yyscanner ); |
|||
#endif |
|||
#endif |
|||
|
|||
#ifndef yytext_ptr |
|||
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); |
|||
#endif |
|||
|
|||
#ifdef YY_NEED_STRLEN |
|||
static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); |
|||
#endif |
|||
|
|||
#ifndef YY_NO_INPUT |
|||
|
|||
#endif |
|||
|
|||
/* Amount of stuff to slurp up with each read. */ |
|||
#ifndef YY_READ_BUF_SIZE |
|||
#define YY_READ_BUF_SIZE 8192 |
|||
#endif |
|||
|
|||
/* Number of entries by which start-condition stack grows. */ |
|||
#ifndef YY_START_STACK_INCR |
|||
#define YY_START_STACK_INCR 25 |
|||
#endif |
|||
|
|||
/* Default declaration of generated scanner - a define so the user can |
|||
* easily add parameters. |
|||
*/ |
|||
#ifndef YY_DECL |
|||
#define YY_DECL_IS_OURS 1 |
|||
|
|||
extern int yylex \ |
|||
(YYSTYPE * yylval_param ,yyscan_t yyscanner); |
|||
|
|||
#define YY_DECL int yylex \ |
|||
(YYSTYPE * yylval_param , yyscan_t yyscanner) |
|||
#endif /* !YY_DECL */ |
|||
|
|||
/* yy_get_previous_state - get the state just before the EOB char was reached */ |
|||
|
|||
#undef YY_NEW_FILE |
|||
#undef YY_FLUSH_BUFFER |
|||
#undef yy_set_bol |
|||
#undef yy_new_buffer |
|||
#undef yy_set_interactive |
|||
#undef YY_DO_BEFORE_ACTION |
|||
|
|||
#ifdef YY_DECL_IS_OURS |
|||
#undef YY_DECL_IS_OURS |
|||
#undef YY_DECL |
|||
#endif |
|||
|
|||
#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" |
|||
|
|||
|
|||
#line 347 "sapi/phpdbg/phpdbg_lexer.h" |
|||
#undef yyIN_HEADER |
|||
#endif /* yyHEADER_H */ |
|||
@ -1,131 +1,169 @@ |
|||
%{ |
|||
|
|||
/* |
|||
* phpdbg_lexer.l |
|||
*/ |
|||
|
|||
#include "phpdbg.h" |
|||
#include "phpdbg_cmd.h" |
|||
#define YYSTYPE phpdbg_param_t |
|||
|
|||
#include "phpdbg_parser.h" |
|||
|
|||
%} |
|||
|
|||
%s RAW |
|||
%s NORMAL |
|||
|
|||
%option outfile="sapi/phpdbg/phpdbg_lexer.c" header-file="sapi/phpdbg/phpdbg_lexer.h" |
|||
%option warn nodefault |
|||
|
|||
%option reentrant noyywrap never-interactive nounistd |
|||
%option bison-bridge |
|||
|
|||
T_TRUE "true" |
|||
T_YES "yes" |
|||
T_ON "on" |
|||
T_ENABLED "enabled" |
|||
T_FALSE "false" |
|||
T_NO "no" |
|||
T_OFF "off" |
|||
T_DISABLED "disabled" |
|||
T_EVAL "ev" |
|||
T_SHELL "sh" |
|||
T_IF "if" |
|||
T_RUN "run" |
|||
T_RUN_SHORT "r" |
|||
|
|||
WS [ \r\n\t]+ |
|||
DIGITS [0-9\.]+ |
|||
ID [^ \r\n\t:#]+ |
|||
ADDR 0x[a-fA-F0-9]+ |
|||
OPCODE (ZEND_|zend_)([A-Za-z])+ |
|||
INPUT [^\n]+ |
|||
%% |
|||
|
|||
<INITIAL>{ |
|||
{T_EVAL} { |
|||
BEGIN(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_EVAL; |
|||
} |
|||
{T_SHELL} { |
|||
BEGIN(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_SHELL; |
|||
} |
|||
{T_RUN}|{T_RUN_SHORT} { |
|||
BEGIN(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_RUN; |
|||
} |
|||
|
|||
.+ { |
|||
BEGIN(NORMAL); |
|||
REJECT; |
|||
} |
|||
} |
|||
|
|||
<NORMAL>{ |
|||
{T_IF} { |
|||
BEGIN(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_IF; |
|||
} |
|||
} |
|||
|
|||
<INITIAL,NORMAL>{ |
|||
{ID}[:]{1}[//]{2} { |
|||
phpdbg_init_param(yylval, STR_PARAM); |
|||
yylval->str = zend_strndup(yytext, yyleng); |
|||
yylval->len = yyleng; |
|||
return T_PROTO; |
|||
} |
|||
[#]{1} { return T_POUND; } |
|||
[:]{2} { return T_DCOLON; } |
|||
[:]{1} { return T_COLON; } |
|||
|
|||
{T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE} { |
|||
phpdbg_init_param(yylval, NUMERIC_PARAM); |
|||
yylval->num = 1; |
|||
return T_TRUTHY; |
|||
} |
|||
{T_NO}|{T_OFF}|{T_DISABLED}|{T_FALSE} { |
|||
phpdbg_init_param(yylval, NUMERIC_PARAM); |
|||
yylval->num = 0; |
|||
return T_FALSY; |
|||
} |
|||
{DIGITS} { |
|||
phpdbg_init_param(yylval, NUMERIC_PARAM); |
|||
yylval->num = atoi(yytext); |
|||
return T_DIGITS; |
|||
} |
|||
{ADDR} { |
|||
phpdbg_init_param(yylval, ADDR_PARAM); |
|||
yylval->addr = strtoul(yytext, 0, 16); |
|||
return T_ADDR; |
|||
} |
|||
{OPCODE} { |
|||
phpdbg_init_param(yylval, OP_PARAM); |
|||
yylval->str = zend_strndup(yytext, yyleng); |
|||
yylval->len = yyleng; |
|||
return T_OPCODE; |
|||
} |
|||
{ID} { |
|||
phpdbg_init_param(yylval, STR_PARAM); |
|||
yylval->str = zend_strndup(yytext, yyleng); |
|||
yylval->len = yyleng; |
|||
return T_ID; |
|||
} |
|||
} |
|||
|
|||
<RAW>{INPUT} { |
|||
#define LEX(v) (PHPDBG_G(lexer).v) |
|||
|
|||
#define YYCTYPE unsigned char |
|||
#define YYSETCONDITION(x) LEX(state) = x; |
|||
#define YYGETCONDITION() LEX(state) |
|||
#define YYCURSOR LEX(cursor) |
|||
#define YYMARKER LEX(marker) |
|||
#define yyleng LEX(len) |
|||
#define yytext ((char*) LEX(text)) |
|||
#undef YYDEBUG |
|||
#define YYDEBUG(a, b) |
|||
#define YYFILL(n) |
|||
|
|||
#define NORMAL 0 |
|||
#define RAW 1 |
|||
#define INITIAL 2 |
|||
|
|||
ZEND_EXTERN_MODULE_GLOBALS(phpdbg); |
|||
|
|||
void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC) { |
|||
PHPDBG_G(parser_stack) = stack; |
|||
|
|||
YYSETCONDITION(INITIAL); |
|||
|
|||
LEX(text) = YYCURSOR = (unsigned char *) input; |
|||
LEX(len) = strlen(input); |
|||
} |
|||
|
|||
int phpdbg_lex (phpdbg_param_t* yylval) { |
|||
TSRMLS_FETCH(); /* Slow, but this is not a major problem here. TODO: Use TSRMLS_DC */ |
|||
|
|||
restart: |
|||
LEX(text) = YYCURSOR; |
|||
|
|||
/*!re2c |
|||
re2c:yyfill:check = 0; |
|||
T_TRUE "true" |
|||
T_YES "yes" |
|||
T_ON "on" |
|||
T_ENABLED "enabled" |
|||
T_FALSE "false" |
|||
T_NO "no" |
|||
T_OFF "off" |
|||
T_DISABLED "disabled" |
|||
T_EVAL "ev" |
|||
T_SHELL "sh" |
|||
T_IF "if" |
|||
T_RUN "run" |
|||
T_RUN_SHORT "r" |
|||
WS [ \r\n\t]+ |
|||
DIGITS [0-9\.]+ |
|||
ID [^ \r\n\t:#\000]+ |
|||
ADDR [0][x][a-fA-F0-9]+ |
|||
OPCODE (ZEND_|zend_)([A-Za-z])+ |
|||
INPUT [^\n\000]+ |
|||
|
|||
<!*> := yyleng = (size_t) YYCURSOR - (size_t) yytext; |
|||
|
|||
<*>[\n\000] { |
|||
return 0; |
|||
} |
|||
|
|||
<NORMAL>{T_IF} { |
|||
YYSETCONDITION(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_IF; |
|||
} |
|||
|
|||
<NORMAL>{ID}[:]{1}[//]{2} { |
|||
phpdbg_init_param(yylval, STR_PARAM); |
|||
yylval->str = zend_strndup(yytext, yyleng); |
|||
yylval->len = yyleng; |
|||
return T_PROTO; |
|||
} |
|||
<NORMAL>[#]{1} { |
|||
return T_POUND; |
|||
} |
|||
<NORMAL>[:]{2} { |
|||
return T_DCOLON; |
|||
} |
|||
<NORMAL>[:]{1} { |
|||
return T_COLON; |
|||
} |
|||
|
|||
<NORMAL>{T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE} { |
|||
phpdbg_init_param(yylval, NUMERIC_PARAM); |
|||
yylval->num = 1; |
|||
return T_TRUTHY; |
|||
} |
|||
|
|||
<NORMAL>{T_NO}|{T_OFF}|{T_DISABLED}|{T_FALSE} { |
|||
phpdbg_init_param(yylval, NUMERIC_PARAM); |
|||
yylval->num = 0; |
|||
return T_FALSY; |
|||
} |
|||
|
|||
<NORMAL>{DIGITS} { |
|||
phpdbg_init_param(yylval, NUMERIC_PARAM); |
|||
yylval->num = atoi(yytext); |
|||
return T_DIGITS; |
|||
} |
|||
|
|||
<NORMAL>{ADDR} { |
|||
phpdbg_init_param(yylval, ADDR_PARAM); |
|||
yylval->addr = strtoul(yytext, 0, 16); |
|||
return T_ADDR; |
|||
} |
|||
|
|||
<NORMAL>{OPCODE} { |
|||
phpdbg_init_param(yylval, OP_PARAM); |
|||
yylval->str = zend_strndup(yytext, yyleng); |
|||
yylval->len = yyleng; |
|||
return T_OPCODE; |
|||
} |
|||
|
|||
<NORMAL>{ID} { |
|||
phpdbg_init_param(yylval, STR_PARAM); |
|||
yylval->str = zend_strndup(yytext, yyleng); |
|||
yylval->len = yyleng; |
|||
return T_ID; |
|||
} |
|||
|
|||
<RAW>{INPUT} { |
|||
phpdbg_init_param(yylval, STR_PARAM); |
|||
yylval->str = zend_strndup(yytext, yyleng); |
|||
yylval->len = yyleng; |
|||
BEGIN(INITIAL); |
|||
return T_INPUT; |
|||
} |
|||
|
|||
{WS} { /* ignore whitespace */ } |
|||
%% |
|||
<*>{WS} { |
|||
/* ignore whitespace */ |
|||
|
|||
goto restart; |
|||
} |
|||
|
|||
<INITIAL>{T_EVAL} { |
|||
YYSETCONDITION(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_EVAL; |
|||
} |
|||
<INITIAL>{T_SHELL} { |
|||
YYSETCONDITION(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_SHELL; |
|||
} |
|||
<INITIAL>{T_RUN}|{T_RUN_SHORT} { |
|||
YYSETCONDITION(RAW); |
|||
phpdbg_init_param(yylval, EMPTY_PARAM); |
|||
return T_RUN; |
|||
} |
|||
|
|||
<INITIAL>. { |
|||
YYSETCONDITION(NORMAL); |
|||
|
|||
YYCURSOR = LEX(text); |
|||
goto restart; |
|||
} |
|||
|
|||
*/ |
|||
} |
|||
550
sapi/phpdbg/phpdbg_parser.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue