PHP/JS/AJAX - Edgar Hoo Blog

Category Archives: PHP/JS/AJAX

Acts of Languages

PHP函数输出HTML时的多余空行

在企图将Edgar Hoo Home Page的静态页面的重用代码函数化,以期改版少费力,却发现虽调用PHP函数所输出的HTML代码同原HTML代码一模一样,但除Opera (10 alpha)、Safari (3.2)将两者解释相同之外,而主流的IE系、FF (3.1 beta 2)及Chrome (1.0)竟将前者在顶部多解释出一行空行。

为便说明问题,现作简易页面。
原HTML代码如下(php-function-html-output-blank-lines.html):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="UTF-8" />
<title>EdgarHoo.com Lab</title>
<link href="pfhobl.css" rel="stylesheet" rev="stylesheet" type="text/css" media="all" />
</head>
<body>
<div id="wrapper">
    <div id="header">
        <h1>EdgarHoo.com Lab</h1>
    </div>
</div>
</body>
</html>

CSS代码如下:

*{
    margin:0;
    padding:0;
}
body{
    color:#fff;
    background:#000;
    text-align:center;
}
#wrapper{
    width:800px;
    height:auto;
    margin:0 auto;
}
#wrapper #header{
    height:50px;
    background:#f00;
}

PHP函数文件(php-function-html-output-blank-lines-include.php),代码如下:

<?php
function head(){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="UTF-8" />
<title>EdgarHoo.com Lab</title>
<link [...]

循环下降语法分析

本文源自笔者的课程《编译原理》的实验二,原题如下:

编写识别由下列文法所定义的表达式的递归下降语法分析器。
E -> E+T | E-T | T
T -> T*F | T/F |F
F -> (E) | i
输入:每行含一个表达式的文本文件。
输出:分析成功或不成功信息。
(来源:海南大学儋州校区计算机系)
采用PHP编码,代码如下:

/*
Item Name: Recursive of the Decline Grammar Analysis
Description: Compilation Principle Experiment 2nd
Version: 1.0
Author: Edgar Hoo
Author URI: http://EdgarHoo.com
Last Updated: Dec. 1, 2008 @ SCUTA
CopyRight 2008 BY-NC-SA
*/
@ $fp = fopen("rdga.txt", 'rb');
if (!$fp){
echo '没有文件!</body></html>';
exit;
}
$array = file("rdga.txt");
$n = count($array);
$err = 1;
if ($array[0] == '') [...]

识别器的实现

本文源自笔者的课程《编译原理》的实验一,原题如下:

假设一个语言允许使用十六进制数,其规定是:必须以数字打头,必须以H结尾,数中允许使用的字母为A,B,C,D,E, F(分别表示10~15)。该语言的标识符为字母开头的字母数字串。试设计一个DFA,使它能识别标识符、无符号的十进制和十六进制整数(假定各单词之间用界限符或空格分开),并编制相应的识别程序。
输入:学生自行确定符号串的输入形式,如键盘输入、文本文件、字符数组等。
输出:标识出规范的符号串与不合规范的符号串。
(来源:海南大学儋州校区计算机系)
要求如下:
A、根据给定的语言求出其文法;
B、将该文法转换成正规式;
C、由正规式构造NFA;
D、将NFA转换成DFA,并将其最小化;
E、根据最小化的DFA编写词法分析程序。
按说这个实验该用C语言编程,但最近学习JavaScript、PHP,正好借此题目练习。
根据题意,笔者认为十六进制整数不含小写字母(包括H),十六进制整数首字符为0的情况下第二字符不能为数字,无符号的十进制整数除0外首字符不能为0。
笔者编JS代码如下:

/*
Item Name: Recognizer of Realize
Description: Compilation Principle Experiment 1st
Version: 1.0
Author: Edgar Hoo
Author URI: http://EdgarHoo.com
Last Updated: Nov. 23, 2008 @ SCUTA
CopyRight 2008 BY-NC-SA
*/
function recog(){
var test = document.myform.mytest.value;// 取得待测字符串
var tl = test.length;// 定义字符串长度
var s=0;// state
for (i=0;i<tl;i++){
 ti = test.charAt(i);// 字符串第i个字符
 if (ti==' ' || ti==' ') s=6;// 去除半角及全角空格
 else {
  switch(s){
    case 0: if (ti==0) s=1;
      else if (ti>=1 && ti<=9) s=2;
      else if [...]