選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

69 行
4.1KB

  1. # E03-S01..E03-S03: build the parser test PRG and a fresh D81 holding every grammar and
  2. # parser fixture. The fixture order must match tests/parser/parser-test.s.
  3. [CmdletBinding()]
  4. param()
  5. $ErrorActionPreference = "Stop"
  6. $project = Split-Path $PSScriptRoot -Parent
  7. Import-Module (Join-Path $PSScriptRoot "lib\Nova128Test.psm1") -Force
  8. $out = Join-Path $project "build\parser-test"
  9. New-Item -ItemType Directory -Force -Path $out | Out-Null
  10. $g = Join-Path $project "tests\grammar"
  11. $p = Join-Path $project "tests\parser"
  12. # disk name -> @(source, group, expect file)
  13. $script:ParserFixtures = [ordered]@{
  14. "minimal.n8" = @("$g\accepted\minimal.n8", "accepted", $null)
  15. "decls.n8" = @("$g\accepted\decls.n8", "accepted", $null)
  16. "arrays.n8" = @("$g\accepted\arrays.n8", "accepted", $null)
  17. "exprs.n8" = @("$g\accepted\exprs.n8", "accepted", $null)
  18. "forward.n8" = @("$g\accepted\forward.n8", "accepted", $null)
  19. "nulls.n8" = @("$g\accepted\nulls.n8", "accepted", $null)
  20. "stmts.n8" = @("$g\accepted\stmts.n8", "accepted", $null)
  21. "badchar.n8" = @("$g\rejected\bad_char.n8", "rejected", "$g\rejected\bad_char.expect")
  22. "badclass.n8" = @("$g\rejected\bad_class.n8", "rejected", "$g\rejected\bad_class.expect")
  23. "badiface.n8" = @("$g\rejected\bad_iface.n8", "rejected", "$g\rejected\bad_iface.expect")
  24. "badmethod.n8" = @("$g\rejected\bad_method.n8", "rejected", "$g\rejected\bad_method.expect")
  25. "dupdecl.n8" = @("$g\rejected\dup_decl.n8", "rejected", "$g\rejected\dup_decl.expect")
  26. "ifacebody.n8" = @("$g\rejected\iface_body.n8", "rejected", "$g\rejected\iface_body.expect")
  27. "linecont.n8" = @("$g\rejected\line_cont.n8", "rejected", "$g\rejected\line_cont.expect")
  28. "missclass.n8" = @("$g\rejected\miss_class.n8", "rejected", "$g\rejected\miss_class.expect")
  29. "missend.n8" = @("$g\rejected\miss_end.n8", "rejected", "$g\rejected\miss_end.expect")
  30. "missif.n8" = @("$g\rejected\miss_if.n8", "rejected", "$g\rejected\miss_if.expect")
  31. "missmeth.n8" = @("$g\rejected\miss_meth.n8", "rejected", "$g\rejected\miss_meth.expect")
  32. "multistmt.n8" = @("$g\rejected\multi_stmt.n8", "rejected", "$g\rejected\multi_stmt.expect")
  33. "order.n8" = @("$p\order.n8", "exact", "$p\order.expect")
  34. "unknown.n8" = @("$p\unknown.n8", "exact", "$p\unknown.expect")
  35. "recover.n8" = @("$p\recover.n8", "exact", "$p\recover.expect")
  36. "noprog.n8" = @("$p\noprog.n8", "exact", "$p\noprog.expect")
  37. "eofclass.n8" = @("$p\eofclass.n8", "exact", "$p\eofclass.expect")
  38. "members.n8" = @("$p\members.n8", "exact", "$p\members.expect")
  39. "lifecycle.n8" = @("$p\lifecycle.n8", "exact", "$p\lifecycle.expect")
  40. "scopes.n8" = @("$p\scopes.n8", "exact", "$p\scopes.expect")
  41. "private.n8" = @("$p\private.n8", "exact", "$p\private.expect")
  42. "prec.n8" = @("$p\prec.n8", "accepted", "$p\prec.expect")
  43. "forms.n8" = @("$p\forms.n8", "accepted", $null)
  44. "syntax.n8" = @("$p\syntax.n8", "exact", "$p\syntax.expect")
  45. }
  46. $link = Invoke-Nova128Link -Name "parser-test" -BuildDir $out `
  47. -Config (Join-Path $project "cfg\compiler.cfg") -Sources @(
  48. (Join-Path $project "src\compiler\mmu.s"),
  49. (Join-Path $project "src\compiler\diskio.s"),
  50. (Join-Path $project "src\compiler\source.s"),
  51. (Join-Path $project "src\compiler\lexer.s"),
  52. (Join-Path $project "src\compiler\names.s"),
  53. (Join-Path $project "src\compiler\diagnostics.s"),
  54. (Join-Path $project "src\compiler\parser.s"),
  55. (Join-Path $project "tests\parser\parser-test.s"))
  56. if ((Get-Nova128Label $link.Labels "test_entry") -ne 0x1C0D) { throw "test_entry is not at `$1C0D" }
  57. $files = @(@{ Name = "parser-test"; Path = $link.Program; Type = "prg" })
  58. foreach ($name in $ParserFixtures.Keys) {
  59. $pet = Join-Path $out ($name -replace '\.n8$', '.pet')
  60. [IO.File]::WriteAllBytes($pet, (ConvertTo-Nova128Petscii (Get-Content -Raw -LiteralPath $ParserFixtures[$name][0])))
  61. $files += @{ Name = $name; Path = $pet; Type = "seq" }
  62. }
  63. New-Nova128Disk -Path (Join-Path $out "parser-test.d81") -Files $files
  64. Write-Host ("built {0}; {1} fixtures on parser-test.d81" -f $link.Program, $ParserFixtures.Count)

Powered by TurnKey Linux.