PHPoC vs PHP > 개요 개요 PHPoC 는솔내시스템 이자체개발한프로그래밍언어입니다. 당사의모든 PHPoC 제품들의펌웨어에는 PHPoC 인터프리터가내장되어있습니다. PHPoC 는범용스크립트언어인 PHP 를기반으로제작되었습니다. PHPoC 는매우간단하여 C 언어등프로그래밍언어에대한경험이있는사람이라면누구나쉽게사용할수있습니다. PHPoC 는기본적으로 PHP 와호환되지만임베디드시스템의특성에따른제한사항들이있습니다. 따라서제품을사용하기전에이문서를읽어보는것을권장합니다. 2018-05-17 Sollae Systems page 1 of 16
PHPoC vs PHP > PHPoC 의특징 > 기본문법 기본문법 주석 단일행주석인 # 을지원하지않습니다. 2018-05-17 Sollae Systems page 2 of 16
PHPoC vs PHP > PHPoC 의특징 > 자료형 자료형 (Types) 진리값 (Booleans) 문자열 "0" 은진리값으로변환했을때 FALSE 가아닌 TRUE 가됩니다. 정수 (Integers) PHPoC 에서정수의최대값은약 9.2*10 18 입니다. 클래스 (Classes) 클래스를지원하지않습니다. 배열 (Arrays) 배열은다음과같은특징이있습니다. 배열은반드시초기값을지정해야만선언이가능합니다. 배열을만들때 KEY 값은숫자만가능합니다. 대괄호를이용한배열생성및함수호출은지원하지않습니다. 배열생성및사용예 <?php // 예 1 $var0 = array(3, 7, "array", "test"); $int0 = $var0[0] + $var0[1]; $str0 = $var0[2]. " ". $var0[3];?> <?php // 예 2 $int0 = 3; $int1 = 7; $str0 = "array"; $str1 = "test"; $var1 = array($int0, $int1, $str0, $str1);?> <?php // 예 3 $str0 = "array test"; $str0[6] = "T"; $str0[7] = "E"; $str0[8] = "S"; 2018-05-17 Sollae Systems page 3 of 16
PHPoC vs PHP > PHPoC 의특징 > 자료형 $str0[9] = "T"; echo $str0; // 출력결과 : array TEST?> 널 (Null) 널을지원하지않습니다. 자동형변환 (Type Juggling) 산술연산자 : 더하기 (+), 빼기 (-), 곱하기 (*), 나누기 (/) 구분 진리값 정수 실수 문자열 진리값 X X X X 정수 X O O X 실수 X O O X 문자열 X X X X 산술연산자 : 나머지 (%) 구분 진리값 정수 실수 문자열 진리값 X X X X 정수 X O X X 실수 X X X X 문자열 X X X X 비트연산자 : AND(&), OR( ), XOR(^), 왼쪽시프트 (<<), 오른쪽시프트 (>>) 구분 진리값 정수 실수 문자열 진리값 X X X X 정수 X O X X 실수 X X X X 문자열 X X X X 비트연산자 : 보수 (~) 진리값정수실수문자열 X O X X 비교연산자 : ~ 보다작음 (<), ~ 보다큼 (>), ~ 보다작거나같음 (<=), ~ 보다크거나같음 (>=) 구분 진리값 정수 실수 문자열 진리값 X X X X 정수 X O O X 실수 X O O X 문자열 X X X O 비교연산자 : 같음 (==), 같지않음 (!=), 같지않음 (<>) 구분 진리값 정수 실수 문자열 진리값 O X X X 정수 X O X X 실수 X X O X 문자열 X X X O 증감연산자 : 증가 (++), 감소 (--) 2018-05-17 Sollae Systems page 4 of 16
진리값정수실수문자열 X O X X 논리연산자 : AND(&&), OR( ) 구분 진리값 정수 실수 문자열 진리값 O O X O 정수 O O X O 실수 X X X X 문자열 O O X O 논리연산자 : NOT(!) 진리값정수실수문자열 O O X O 부호연산자 : 양수 (+), 음수 (-) 진리값정수실수문자열 X O O X 제어구조의표현식 : if 문, for 문, (do) while 문 진리값정수실수문자열 O O X O printf 함수의출력포맷 구분 진리값 정수 실수 문자열 %b, %o, %x X O X X %d, %u X O X X %c X O X X %e, %f, %g X X O X %s X X X O PHPoC vs PHP > PHPoC 의특징 > 자료형 2018-05-17 Sollae Systems page 5 of 16
PHPoC vs PHP > PHPoC 의특징 > 변수 변수 (Variables) 변수선언 변수를선언할때반드시초기값을지정해주어야합니다. 또한단일행에서둘이상의변수를선언할수없습니다. 변수이름의최대크기는 32 바이트입니다. 변수이름이 32 바이트를넘는경우에는나머지부분이무시됩니다. 가변변수이름 (Variable Variables) 가변변수이름을지원하지않습니다. 2018-05-17 Sollae Systems page 6 of 16
PHPoC vs PHP > PHPoC 의특징 > 상수 상수 (Constants) 상수선언 'const' 키워드를사용한상수의선언을지원하지않습니다. 미리정의된상수 (Predefined Constants) PHPoC 는몇가지미리정의된상수를제공합니다. 자세한내용은부록을참조하세요. 2018-05-17 Sollae Systems page 7 of 16
PHPoC vs PHP > PHPoC 의특징 > 연산자 연산자 (Operators) 연산자우선순위 우선순위 연산자기호 연산자구분 높음 [ ( 괄호 ++ -- ~ (int) (string) (bool) 증감 / 캐스트! 논리 * / % 산술 + -. 산술 <> 비트 < <= > >= 비교 ==!= ===!== <> 비교 & 비트 ^ 비트 비트 && 논리 논리? : 비교 ( 삼항 ) 낮음 = += -= *= /=.= %= &= = ^= <>= 대입 산술연산자 (Arighmetic Operators) PHPoC 는정수와정수의산술연산결과는항상정수입니다. PHPoC <?php $a = 3; $b = 2; echo $a / $b; // 출력결과 : 1( 정수 )?> PHP <?php $a = 3; $b = 2; echo $a / $b; // 출력결과 : 1.5?> 에러제어연산자 (Error Control Operators) 에러제어연산자 (@) 는지원하지않습니다. 2018-05-17 Sollae Systems page 8 of 16
PHPoC vs PHP > PHPoC 의특징 > 연산자 실행연산자 (Excecution Operators) 실행연산자 (` `) 는지원하지않습니다. 논리연산자 (Logical Operators) 논리연산자는기호형태로 ('!', '&&', ' ', '^') 만사용이가능하며문자형태 (NOT, AND, OR, XOR) 로는사용할수없습니다. 배열연산자 (Array Operators) 배열연산자 (Union, Equality, Identity 등 ) 는지원하지않습니다. 2018-05-17 Sollae Systems page 9 of 16
PHPoC vs PHP > PHPoC 의특징 > 제어구조 제어구조 (Control Structures) 제어구조 다음의제어구조는지원하지않습니다. foreach, declare, require, require_once, goto, label 대체문법 (Alternative Syntax for Control Structures) 모든제어구조를위한대체문법 (':', endif, endwhile 등 ) 은지원하지않습니다. Switch 문 Switch 문의 case 표현식뒤에 ':'( 콜론 ) 대신 ';'( 세미콜론 ) 을사용할수없습니다. 2018-05-17 Sollae Systems page 10 of 16
PHPoC vs PHP > PHPoC 의특징 > 함수 함수 (Functions) 함수의선언 PHP 에서는함수의호출을선언보다먼저할수있지만, PHPoC 는반드시선언을먼저한이후에호출을할수있습니다. 함수인수 (Function Arguments) 하나의사용자함수의인자값은그이름이중복됨을허용하지않습니다. 반환값 (Returning Values) 사용자정의함수는함수의반환값이지정되지않았을때 NULL 이아닌 0 을반환합니다. 참조에의한반환을지원하지않습니다. 가변함수이름 (Variable Functions) 가변함수이름은지원하지않습니다. 이름없는함수 (Anonymous functions) 이름없는함수는지원하지않습니다. 내부함수 PHPoC 는다양한내부함수를지원합니다. 이함수들의자세한사용법은 PHPoC Internal Functions 문서를참조하시기바랍니다. 2018-05-17 Sollae Systems page 11 of 16
PHPoC vs PHP > PHPoC 의특징 > 네임스페이스 네임스페이스 (Namespaces) 사용자정의네임스페이스 (User-defined Namespaces) 사용자정의네임스페이스는지원하지않습니다. 네임스페이스의공유 키워드, 함수및상수는네임스페이스를공유합니다. 따라서함수및상수를만들때동일한이름이없도록유의하시기바랍니다. 2018-05-17 Sollae Systems page 12 of 16
미리정의된상수 (Predefined Constants) PHPoC vs PHP > 부록 > 미리정의된상수 PHPoC 는다음의미리정의된상수들을제공합니다. 미리정의된상수 설명 값 COUNT_NORMAL 일반적카운팅 (1차원배열요소카운팅 ) 0 COUNT_RECURSIVE 반복적카운팅 ( 다차원배열요소카운팅 ) 1 EPIPE 파이프종료 (Broken Pipe), TCP데이터송신중접속이끊어지면반환됨 32 (0x20) EBUSY 디바이스사용중 (Device or Resource Busy) 16 (0x10) ENOENT 파일엔트리에없음 2 FALSE 거짓 0 M_PI 원주율 3.141592653589793 M_E 자연대수 2.718281828459045 MAX_STRING_LEN 최대문자열변수길이 1,534 O_NODIE 스크립트종료회피 : 파일열기 4 PHP_VERSION_ID PHPoC 버전정보 - SEEK_SET 파일포인터위치 : 파일의시작 0 SEEK_CUR 파일포인터위치 : 현재위치 1 SEEK_END 파일포인터위치 : 파일의끝 2 SSL_CONNECTED SSL 접속상태 : 접속완료 19 (0x13) SSL_CLOSED SSL 접속상태 : 접속끊김 0 SSL_LISTEN SSL 접속상태 : 접속대기 1 TRUE 참 1 TCP_CLOSED TCP 접속상태 : 접속끊김 0 TCP_LISTEN TCP 접속상태 : 접속대기 1 TCP_CONNECTED TCP 접속상태 : 접속완료 4 2018-05-17 Sollae Systems page 13 of 16
PHPoC vs PHP > 부록 > 키워드 키워드 (Keyword) 다음은 PHPoC 에서미리정의된키워드입니다. 키워드, 함수그리고상수는하나의네임스페이스를공유하므로함수및상수를선언할때아래의키워드와중복되지않도록유의하시기바랍니다. a b c d e g i p r s w 알파벳 array bool boolean break case const continue default define die do echo else elseif exit global goto if int integer include include_once print return static string switch while 미리정의된키워드 2018-05-17 Sollae Systems page 14 of 16
PHPoC vs PHP > 부록 > 메모리관련제한사항 메모리관련제한사항 선언가능한최대변수개수 PHPoC 는메모리용량이제한적이므로변수의사용에필요한메모리용량또한제한되어있습니다. 따라서변수의개수와문자열변수의길이는제한되며, 문자열변수가크기가늘어날수록이와반비례하여사용가능한개수는줄어듭니다. 2018-05-17 Sollae Systems page 15 of 16
PHPoC vs PHP > 부록 > 오류메시지 오류메시지 (Error Messages) PHPoC 는사용자디버깅을위해다양한오류메시지를콘솔로출력합니다. 에러메시지 address already in use argument count mismatch cannot break/continue N level(s) 'case' or 'default' expected device or resource busy divided by zero duplicated name expression syntax error file name too long file not found function not implemented integer number too large invalid argument invalid constant name invalid device or address maximum execution time exceeded missing operator missing terminating character ''' or '"' modifiable value required only variable can be passed by reference operation not permitted out of memory string too long syntax error syntax error, unexpected array [, expecting 'token'] syntax error, unexpected character syntax error, unexpected 'character' [, expecting 'character'] syntax error, unexpected end of file syntax error, unexpected 'name' [, expecting 'character'] syntax error, unexpected number [, expecting 'character'] syntax error, unexpected 'operator' [, expecting 'token'] syntax error, unexpected string [, expecting 'character'] syntax error, unexpected 'token' [, expecting 'token'] syntax error, unexpected variable [, expecting 'character'] too many open files undefined name undefined offset unsupported argument type unsupported operand type unsupported operator unsupported pid unsupported type juggling 'while' expected 2018-05-17 Sollae Systems page 16 of 16