Quake3 처럼, 애플리케이션 내에 콘솔창을 넣을때, 그냥 노가다로 하는건가요?

freezm7의 이미지

Quake3 해보신 분은 알겠지만,
` 키를 누르면 게임내에서 다양한 설정을 할수 있는 설정 콘솔이 뜹니다.

게임 치고는 참 신기한 발상이었죠.

제가 만드는 프로그램도 실행중에 프로그램 내부의 변수를 직접 변경할수 있도록
이런 콘솔창을 넣으면 어떨까 하는 생각을 하고 있는데요,
문법을 정하고 파싱을 하는게 순전히 노가다로 하는건가요?

노가다를 제외하면, 2가지 정도가 떠오르는데요

1. Lex&Yacc 을 이용해서 파서를 만들고, 그 파서에 매핑되는 곳에서 처리를 하는 방법

2. Perl, Python, Ruby 같은 파서 엔진을 임베드하고, 이 엔진이 알아서 처리하게 하는 방법

1번은 사실 구현할 수는 있지만, 변수 하나를 변경하는것도 스트링 비교를 통해 어떤 변수의 값을 바꿀 것인지 정해야 할 정도로 확장성이 없을 것 같구요.
2번은.. 2번 자체가 가능한 것인지 전혀 제가 알지를 못하겠네요.

2번과 같이 파서 엔진을 애플리케이션 내에서 사용해 보신 분 계신가요?

달리나음의 이미지

렉스 야크 등의 도구를 만들어도 되고요 (유사 프로그램은 되게 많습니다.).

그냥 파서를 짜도 됩니다. 퀘이크 정도의 문법을 처리하는 파서를 만드는 것은 큰일이 아닙니다.

bootmeta의 이미지

quake3를 만든 ID software에서 공개한 doom, quake1,2의 소스를 보면 C언어와 유사한 interpreter를 제작해 사용했습니다.

밑바닥 언어를 만들 생각이 아니라면 언급하신 Python, Ruby를 내장하는 것도 한 방법이겠죠.

분야마다 선호하는 script 언어는 다릅니다.

1)게임 - LUA
워크래프트 온라인(WOW)의 UI 제작 script로 채택되면서 많은 이들이 관심을 가지게 되었습니다.

2)office
ms-office - vbscript
open-office - python

3)web browser
internet explorer - jscript, vbsript
firefox - javascript

4)emacs - elisp

또다른 추세로 ms의 경우, dot-net 기반 프로그램들의 경우, dot-net 지원 script라면 쉽게 통합이 가능 지원하는 방향으로 가고 있습니다.

달리나음의 이미지

게임이라면 매우 많은 언어들이 참여하였죠. Perl, Python 등이 활약한 사례도 어렵지 않게 찾을 수 있고 여러 XBOX와 PS의 게임에서 Lisp도 사용되었습니다. C언어 인트프리터가 사용된 경우도 있더군요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.