⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 magic2.dpr

📁 语法分析 语法分析
💻 DPR
字号:

(* lexical analyzer template (TP Lex V3.0), V1.0 3-2-91 AG *)

(* global definitions: *)

(* 演示状态的用法,这个示例故意做成不能运行 *)
program Magic2;

{$APPTYPE CONSOLE}

uses
  SysUtils, LexLib;


const MAGIC = 2;


function yylex : Integer;

procedure yyaction ( yyruleno : Integer );
  (* local definitions: *)
begin
  (* actions: *)
  case yyruleno of
  1:
     		Start(MAGIC);
  2:
  		ECHO;
  3:
          	begin
                  Start(0);
		  Write('Magic:');
		  ECHO;
		end;
  end;
end(*yyaction*);

(* DFA table: *)

type YYTRec = record
                cc : set of Char;
                s  : Integer;
              end;

const

yynmarks   = 20;
yynmatches = 20;
yyntrans   = 28;
yynstates  = 16;

yyk : array [1..yynmarks] of Integer = (
  { 0: }
  { 1: }
  { 2: }
  { 3: }
  { 4: }
  2,
  { 5: }
  2,
  { 6: }
  2,
  3,
  { 7: }
  2,
  3,
  { 8: }
  2,
  { 9: }
  2,
  3,
  { 10: }
  2,
  { 11: }
  2,
  3,
  { 12: }
  2,
  { 13: }
  2,
  3,
  { 14: }
  1,
  2,
  { 15: }
  1,
  2,
  3
);

yym : array [1..yynmatches] of Integer = (
{ 0: }
{ 1: }
{ 2: }
{ 3: }
{ 4: }
  2,
{ 5: }
  2,
{ 6: }
  2,
  3,
{ 7: }
  2,
  3,
{ 8: }
  2,
{ 9: }
  2,
  3,
{ 10: }
  2,
{ 11: }
  2,
  3,
{ 12: }
  2,
{ 13: }
  2,
  3,
{ 14: }
  1,
  2,
{ 15: }
  1,
  2,
  3
);

yyt : array [1..yyntrans] of YYTrec = (
{ 0: }
  ( cc: [ #1..#9,#11..'l','n'..#255 ]; s: 5),
  ( cc: [ 'm' ]; s: 4),
{ 1: }
  ( cc: [ #1..#9,#11..'l','n'..#255 ]; s: 5),
  ( cc: [ 'm' ]; s: 4),
{ 2: }
  ( cc: [ #1..#9,#11..'l','n'..#255 ]; s: 7),
  ( cc: [ 'm' ]; s: 6),
{ 3: }
  ( cc: [ #1..#9,#11..'l','n'..#255 ]; s: 7),
  ( cc: [ 'm' ]; s: 6),
{ 4: }
  ( cc: [ #1..#9,#11..'`','b'..#255 ]; s: 5),
  ( cc: [ 'a' ]; s: 8),
{ 5: }
  ( cc: [ #1..#9,#11..#255 ]; s: 5),
{ 6: }
  ( cc: [ #1..#9,#11..'`','b'..#255 ]; s: 7),
  ( cc: [ 'a' ]; s: 9),
{ 7: }
  ( cc: [ #1..#9,#11..#255 ]; s: 7),
{ 8: }
  ( cc: [ #1..#9,#11..'f','h'..#255 ]; s: 5),
  ( cc: [ 'g' ]; s: 10),
{ 9: }
  ( cc: [ #1..#9,#11..'f','h'..#255 ]; s: 7),
  ( cc: [ 'g' ]; s: 11),
{ 10: }
  ( cc: [ #1..#9,#11..'h','j'..#255 ]; s: 5),
  ( cc: [ 'i' ]; s: 12),
{ 11: }
  ( cc: [ #1..#9,#11..'h','j'..#255 ]; s: 7),
  ( cc: [ 'i' ]; s: 13),
{ 12: }
  ( cc: [ #1..#9,#11..'b','d'..#255 ]; s: 5),
  ( cc: [ 'c' ]; s: 14),
{ 13: }
  ( cc: [ #1..#9,#11..'b','d'..#255 ]; s: 7),
  ( cc: [ 'c' ]; s: 15),
{ 14: }
  ( cc: [ #1..#9,#11..#255 ]; s: 5),
{ 15: }
  ( cc: [ #1..#9,#11..#255 ]; s: 7)
);

yykl : array [0..yynstates-1] of Integer = (
{ 0: } 1,
{ 1: } 1,
{ 2: } 1,
{ 3: } 1,
{ 4: } 1,
{ 5: } 2,
{ 6: } 3,
{ 7: } 5,
{ 8: } 7,
{ 9: } 8,
{ 10: } 10,
{ 11: } 11,
{ 12: } 13,
{ 13: } 14,
{ 14: } 16,
{ 15: } 18
);

yykh : array [0..yynstates-1] of Integer = (
{ 0: } 0,
{ 1: } 0,
{ 2: } 0,
{ 3: } 0,
{ 4: } 1,
{ 5: } 2,
{ 6: } 4,
{ 7: } 6,
{ 8: } 7,
{ 9: } 9,
{ 10: } 10,
{ 11: } 12,
{ 12: } 13,
{ 13: } 15,
{ 14: } 17,
{ 15: } 20
);

yyml : array [0..yynstates-1] of Integer = (
{ 0: } 1,
{ 1: } 1,
{ 2: } 1,
{ 3: } 1,
{ 4: } 1,
{ 5: } 2,
{ 6: } 3,
{ 7: } 5,
{ 8: } 7,
{ 9: } 8,
{ 10: } 10,
{ 11: } 11,
{ 12: } 13,
{ 13: } 14,
{ 14: } 16,
{ 15: } 18
);

yymh : array [0..yynstates-1] of Integer = (
{ 0: } 0,
{ 1: } 0,
{ 2: } 0,
{ 3: } 0,
{ 4: } 1,
{ 5: } 2,
{ 6: } 4,
{ 7: } 6,
{ 8: } 7,
{ 9: } 9,
{ 10: } 10,
{ 11: } 12,
{ 12: } 13,
{ 13: } 15,
{ 14: } 17,
{ 15: } 20
);

yytl : array [0..yynstates-1] of Integer = (
{ 0: } 1,
{ 1: } 3,
{ 2: } 5,
{ 3: } 7,
{ 4: } 9,
{ 5: } 11,
{ 6: } 12,
{ 7: } 14,
{ 8: } 15,
{ 9: } 17,
{ 10: } 19,
{ 11: } 21,
{ 12: } 23,
{ 13: } 25,
{ 14: } 27,
{ 15: } 28
);

yyth : array [0..yynstates-1] of Integer = (
{ 0: } 2,
{ 1: } 4,
{ 2: } 6,
{ 3: } 8,
{ 4: } 10,
{ 5: } 11,
{ 6: } 13,
{ 7: } 14,
{ 8: } 16,
{ 9: } 18,
{ 10: } 20,
{ 11: } 22,
{ 12: } 24,
{ 13: } 26,
{ 14: } 27,
{ 15: } 28
);


var yyn : Integer;

label start, scan, action;

begin

start:

  (* initialize: *)

  yynew;

scan:

  (* mark positions and matches: *)

  for yyn := yykl[yystate] to     yykh[yystate] do yymark(yyk[yyn]);
  for yyn := yymh[yystate] downto yyml[yystate] do yymatch(yym[yyn]);

  if yytl[yystate]>yyth[yystate] then goto action; (* dead state *)

  (* get next character: *)

  yyscan;

  (* determine action: *)

  yyn := yytl[yystate];
  while (yyn<=yyth[yystate]) and not (yyactchar in yyt[yyn].cc) do inc(yyn);
  if yyn>yyth[yystate] then goto action;
    (* no transition on yyactchar in this state *)

  (* switch to new state: *)

  yystate := yyt[yyn].s;

  goto scan;

action:

  (* execute action: *)

  if yyfind(yyrule) then
    begin
      yyaction(yyrule);
      if yyreject then goto action;
    end
  else if not yydefault and yywrap then
    begin
      yyclear;
      return(0);
    end;

  if not yydone then goto start;

  yylex := yyretval;

end(*yylex*);



begin
  yylex;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -